区别
- Git是分布式的,而Svn不是分布的
- Git把内容按元数据方式存储,而SVN是按文件:因为,.git目录是处于你的机器上的一个克隆版的版本库,它拥有中心版本库上所有的东西,例如标签,分支,版本记录等。.git目录的体积大小跟.svn比较,你会发现它们差距很大。
- Git没有一个全局版本号,而SVN有:目前为止这是跟SVN相比Git缺少的最大的一个特征。
- Git的内容的完整性要优于SVN: GIT的内容存储使用的是SHA-1哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。
- Git下载下来后,在OffLine状态下可以看到所有的Log,SVN不可以。
- SVN必须先Update才能Commit,忘记了合并时就会出现一些错误,git在提交之前需要先pull一下。
- SVN的分支(Branch),是一个完整的目录,且这个目录拥有完整的实际文件;而 Git,每个工作成员可以任意在自己的本地版本库开启无限个分支。
- SVN的特点是简单,只是需要一个放代码的地方时用是OK的。
Git的特点版本控制可以不依赖网络做任何事情,对分支和合并有更好的支持(当然这是开发者最关心的地方),不过想各位能更好使用它,需要花点时间尝试下。。
如何使用
一.git
1.如何把本地的git项目 推送到gitlab上
file ->new ->Project from version control
填Git Repository URL
Parent Directory 可以命名为某个目录/trunk 可以区分版本 不会导致代码版本很乱
把原有文件夹的文件除.iml文件,拷贝到trunk目录下
然后把文件夹add to vcs
然后commit and push
2.若把自己的项目创传指定的gitlab所属小组,如何操作?
1)首先 groups-your groups–>选所属分组
若不需要再某个小组内上传,可直接操作第二步
2)new project
输入项目名
输入说明 阅读read.me
保存后会生成一个操作页面,按照指定操作即可
3)进入本地目录cabinet ,右键git bash,根据操作页进行上传
若是第一次操作git,需要配置ssh key之类的,进行身份验证,生成ssh的方式操作如下:
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
其中-t是:指定密钥类型,默认是rsa,可以省略
-C是:设置注释文字,比如邮箱
-f是:指定密钥文件存储文件名
Enter file in which to save the key (/c/Users/Administrator/.ssh/id_rsa):
回车之后会创建一个.ssh目录,里边存放的是ssh key,包括密钥和公钥。每次用公钥和密钥去push或者去连另外一台服务器。
cat ~/.ssh/id_rsa.
出现 id_rsa id_rsa.pub
cat ~/.ssh/id_rsa.pub 取出公钥 然后把公钥add进去
拷贝公钥,然后进入github页面,进入settings,找到SSH Keys
Tittle 自己取名
Key 粘贴进去
这时候的key是本机的,已经于github起到关联作用
3.git 的常用命令
(1)查看文件 ls -a
(2)创建文件 touch 文件名
(3)编辑文件 vi 文件名 (i进入插入状态,编辑完成点esc,在输入:wq,保存并退出)
(4)查看状态 git status
这时候本地没有一个git 的repository仓库
首先
(1)初始化仓库 git init (传统的版本控制都会追踪一个文件,但是Git不会)
git status
(2)配置自己的名字和邮箱
git config --global user.name "hancc"
git config --global user.email "hancc@163.com"
查看global配置的位置 cat ~/.gitconfig
(3)git commit -m"first commit" use "git add" to track git不会跟踪文件的变更 ,需要手动的去add
(4)git add test01.gitchina
git status
(5)git commit -m"first commit"
1 file changed,i insertion(+)
(6)git log
会显示:Commit /Author/Date
4.git commit -a机制
(1)创建文件 touch test11.gitchina
(2)编辑文件 vi test11.gitchina
(3)提交文件 git commit -m"test commit" 提示use "git add" to track
(4)修改以前的 vi test01.gitchina
(5)查看状态 git status
(6)提交 git commit -a -m"-a commit" 完成了一次提交
(7)git status
test01 跟踪过的文件请提交了
test11 未跟踪的文件请没有提交
总结:git commit -a 可以减少git add的操作,但是只对曾经已纳入到版本库中的文件起到作用,那些一次也没被git跟踪过的文件,是无法使用git commit -a的操作,也就是在新的文件下,每次都是需要做git add的操作的
(8)添加文件 git add test11.gitchina
(9)提交文件 git commit -m "test"
5.一次提交多个文件
(1)修改文件 vi test11.gitchina
(2)查看变更 git commit -a -v
操作:add test 1
add test 2
kkkkk
(3)查看日志 git log
(4)查看状态 git status
(5)更换界面 git config --global core.editor vi
(6)查看变化 git commit -a -v
添加 test01
test02
test03 保存提交
(7)查看日志 git log 可以看到commit多行
6.如何把本地的代码推送到远程仓库?
git checkout -b MyIdentityBranch 创建并切换到我的本地分支
git status 查看我的修改记录
git add . 把修改和新增提到暂存区
git commit -m '根据...查询信息' 为暂存区的改变提交更改信息说明
git checkout dev 切换到dev分支
git pull dev远程的更新同步到本地
git merge MyIdentityBranch 把我的本地开发分枝合到dev
git push 推送dev分支
7.代码提交到master了怎么办 其实应该提交到assemblePayment_0402分枝?
git checkout assemblePayment_0402 切换到assemblePayment_0402分支
git pull
git merge master
git push
git checkout master
git log
git revert commitID(提交版本)
这样可以把提交到master的代码 合并到0402分支上 并且把master提交的代码revert
但是要确认下master的代码是否为最新的,以免上线0402时,对别的功能有什么影响
二. svn
下载TortoiseSVN
1.svn checkout
宕下远程代码到本地或本地开发工具中
ieda右键点击项目,Subversion–update Directory–commit把本地代码提交到远程的分支