|
Git是一款分布式的源代码管理工具。
分布式管理工具相对于CVS和SVN这种集中式的代码管理工具,有以下的几点好处:
- 代码仓库分散,避免单点故障。如果集中的代码仓库出现问题,完全可以根据每个人的代码仓库重建集中的代码仓库,几乎没有什么损失。
- 每个人在本地都有一个代码仓库,在本地也可以进行代码管理,checkin,checkout,可以离线管理代码,在连线之后再push到集中的代码库中。
还有就是Git在速度方面要大大优于CVS和SVN,以及强大的分支合并功能。
创建git仓库
进入仓库
初始化git工作目录
创建readme文件,并且写入hello
查看当前状态
状态信息中包括有哪些文件还没有添加到暂存区,需要执行git add命令。哪些文件添加到暂存区,还没有提交,需要执行git commit。总之,有很多的帮助信息。提示你下一步该怎么做。
查看日志
日志信息中包括提交者的姓名,电子邮件,提交时间,提交的注释
- user1@web:~/gittest$ git log
- commit bcf5ec69408e12b6654cc45a80a781cce6752be1
- Author: woaigithub
- Date: Tue Oct 23 21:10:37 2012 +0800
- 4
- commit 81971bb9852674f99844d65eac65effae899e75d
- Author: woaigithub
- Date: Tue Oct 23 20:52:54 2012 +0800
- 3
- commit 7bb694190d5443ebae494d5b47324d09eb8266e0
- Author: woaigithub
- Date: Tue Oct 23 20:50:20 2012 +0800
- 2
- commit 8cc48213baed67ca46836cfb69593529c6d361b1
- Author: user1.web
- Date: Tue Oct 23 20:46:34 2012 +0800
- first
查看某一个提交的详细信息
首先从git log中获取所有的提交信息,然后用git show 加上某一次提交的commit信息,就是log中的commit段信息,作为参数,就可以查看这次commit的详细信息。
包括提交的用户,时间,内容,所做的修改。
- user1@web:~/gittest$ git show 8cc482
- commit 8cc48213baed67ca46836cfb69593529c6d361b1
- Author: user1.web
- Date: Tue Oct 23 20:46:34 2012 +0800
- first
- diff --git a/readme b/readme
- new file mode 100644
- index 0000000..ce01362
- --- /dev/null
- +++ b/readme
- @@ -0,0 +1 @@
- +hello
commit信息一般只需要前面的几个字符就可以,经过尝试最好使用6个字符。
- git show HEAD #获取当前分支最近一次提交的详细信息
设置git用户信息
- git config --global user.name "woaigithub"
- git config --global user.email jorden008@gmail.com
添加到管理系统,每次修改文件,也需要执行下面的命令
提交到仓库
- git commit -m "first commit"
添加的同时提交
- git commit -a -m "second"
未加入暂存区的文件和已加入暂存区的文件比较
- user1@web:~/gittest$ git diff
- diff --git a/file1 b/file1
- index c7dc989..ad735d2 100644
- --- a/file1
- +++ b/file1
- @@ -1 +1,2 @@
- 2222
- +helo
- diff --git a/readme b/readme
- index b1efb35..9e717a9 100644
- --- a/readme
- +++ b/readme
- @@ -1,4 +1,4 @@
- -hello
- +hasdfsdfello
- second
- 3
- 4
第二行中显示比较的两个文件。
第四行是已加入暂存区的文件,也就是执行git add命令的文件。
第五行是未加入暂存区的文件,也就是刚编辑过,还么有执行git add的文件。
第六行的信息是,-文件显示第1行,+文件显示第1行和第2行。
第七行,信息中没有+-号,说明这两个文件中都包含2222。
第八行,+号说明helo只是在第二个文件中才有。
第九行,比较的是两个readme文件。
显示的是两个文件的1-4行。
第一个文件中有hello,第二个文件中有hasdfsdfello,两个文件都有second,3,4这些信息。
列出所有的分支
创建分支
- git checkout -b develop #创建develop分支,并且切换到develop分支
- git branch fixbug001 #创建fixbug001分支
切换分支
切换到master分支
合并分支
首先在develop分支开发,如果完成,达到合并的要求,要合并到master分支。首先要切换到master分支,然后执行合并命令。
- git checkout master
- git merge develop
删除不要的分支
有的分支,在完成使命之后,就可以删除,防止过多的分支导致混乱。在删除分支之前,要切换到其他分支。
- git checkout master
- git branch -d fixbug001
克隆一个远程项目
执行下面的命令,会在本地建立一个railsblog目录,然后初始化,然后从远程获取代码到目录。
- git clone https://github.com/woaigithub/railsblog.git
账户@IP:工作树目录
git@192.168.0.111:~/work/blog
在192.168.0.111机器的git账户的/home/git/work/blog目录有一个仓库。
- git clone git@192.168.0.111:~/work/blog
clone远程服务器的仓库以后,如果远程服务器有多个分支,在本地使用git branch发现只有一个master分支。
需要使用
查看所有的分支,包括远程的分支。
- git checkout -b develop origin/develop
可以获取远程的develop分支到本地,并且建立跟踪。
合并远程仓库和本地仓库的代码
假设在远程192.168.0.112有一个仓库/home/user2/work/blog,要合并到本地的仓库。首先进入本地仓库,然后执行git pull。
- cd ~/work/blog
- git pull git@192.168.0.112:~work/blog master
git pull 远程地址 本地分支
这个命令包含两个步骤,首先是从远程仓库获取,然后是将获取的代码和本地仓库合并。
获取合并也可以分开做,首先fetch,然后在merge。
从远程仓库fetch
- git fetch git@192.168.0.112:~/work/blog
合并fetch的内容
多人协同开发的过程中,合并可能会发生冲突,git会提示有冲突,这时候需要我们人工处理,处理之后,再提交。
如果两个人对同一个文件的同一行进行修改,在合并的时候就会发生冲突,git不知道如何取舍。git会将两个人的修改都保存起来,中间用===============分割开来,等待你的处理。
git虽然是分布式的代码管理工具,但是我们在多人协同开发的时候还是需要一个服务器来集中管理最新的源代码以及每个版本的源代码,也就是需要一个集中的地方。
假设这台服务器的地址是192.168.0.1,用户是git,在/home/git/blog.git目录建立空的共享的仓库。
- cd ~
- mkdir blog.git
- cd blog.git
- git init --bare --shared
这时候,如果一个用户就可以把本地仓库的代码push到远程服务器,然后其他用户都从远程服务器pull最新的代码。
- git push git@192.168.0.1:~/blog.git master
git push 远程地址 本地分支
远程地址,每次都写一大堆比较麻烦,可以给他们起个简称。
- git remote add origin git@192.168.0.1:~/blog.git
以后pull和push就可以。
- git pull origin master
- git push origin master
查看所有的remote
- git remote #只显示名称
- git remote -v #显示名称和详细地址
标签tag
标签可以用来做版本,v1.0, v1.1。
建立标签
列出tag
删除tag
git push默认不会push tags到服务器,需要加上--tags参数。
- git push --tags origin master
这样才会将tag信息一并push到服务器,别人clone也会将tag一并clone的。
工作流程
使用git的工作流程和以前使用svn有些不一样。
多人协作环境,有一个集中的源代码管理服务器,每个人都有本地仓库。
首先从服务器pull最新代码,并合并到本地。
git pull
新开一个分支开始工作。
git checkout newbranch
git branch newbranch
提交代码
git add
git commit
再次从服务器获取最新。
git pull
合并没有问题之后,push到服务器。
git push
删除刚才建立的分支。
git branch -d newbranch
上面只是一个参考流程,具体根据环境调节。
参考文献
1.Git分支管理策略
2.读懂diff
3.git-tutorials.pdf(下面的附件下载)
4.Git项目合作(remote pull push)学习学习
5.Git学习教程
|
|