转载请注明出处:http://blog.csdn.net/li0978/article/details/52072880
首先说明一下git和svn的最重要的区别:git属于分布式代码托管系统,而svn属于集中式。git会在每台电脑上构建一个本地仓库,各干各的互不影响,即使远程仓库莫名损坏了也不怕,因为每一个队员都有一个仓库。使用git在编辑文档和代码时是不需要联网的,而svn却不行。等等诸如此类多个优点,所以git成为现今大众选择的主流代码托管系统。
准备工作:
1.下载安装git客户端
windows用户请下载 http://msysgit.github.com/
mac用户请下载 http://code.google.com/p/tortoisegit/
2.注册github账户
https://github.com/
配置SSH公钥:
这一步是为了在安全环境下访问git远程仓库,一个公钥只能认证一个用户,而一个用户却可以拥有多个公钥。另外git除了可以使用ssh协议来被访问,还可以以https协议去访问,不过后者必须要设置用户名和密码,每次访问必须要验证用户名和密码,提交代码时相对比较繁琐。
1.打开git客户端,输入ssh-keygen -t rsa -C “username@example.com”,( 注册的邮箱),接下来点击enter键即可(也可以输入密码)。
2.本地打开 id_rsa.pub 文件(或执行 $cat id_rsa.pub ),复制其中全部内容粘贴到github中设置界面的ssh公钥添加处,名字随便设。
3.验证ssh公钥是否添加成功,在git客户端下接着输入:ssh -T git@github.com,回车就会看到:You’ve successfully authenticated, but GitHub does not provide shell access 。这就表示已成功连上github。
远程仓库与本地仓库建立连接:
1.现在github添加创建一个项目,名字,描述,建议写清楚,不论共享还是私密,队员刚接触的时候也算有一点帮助。另外可以添加一个readme文件,将来里面可以存一些关于项目的介绍之类的说明,下边的两项一个是添加.gitignore文件(接下来说明),一个是开放源代码说明。(根据需求选择添加)。最后点击创建。
$ cat .gitignore
*.[oa] # 忽略所有以 .o 或 .a 结尾的文件
*~ # 忽略所有以波浪符(~)结尾的文件
*.a # 忽略所有 .a 结尾的文件
!lib.a # 但 lib.a 除外
/TODO # 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO
build/ # 忽略 build/ 目录下的所有文件
doc/*.txt # 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt
2.接下来我们要在本地建一个本地仓库。采用cd 定位到我们的项目地址。采用"git init "命令给这个项目创建一个本地仓库。
3.远程仓库和本地仓库都建好了,我们要将两个仓库建立连接。采用“git remote add origin git@github.com:yourName/yourRepo.git”中间的origin 是默认的别名,也可以设成我们自己规定的别名,不过以后提交代码要用“push 自己的别名 分支”提交了,另外git为了便于操作可以采用快捷键tab来实现指令的补全功能。
4.验证是否连接成功,我们可以查看当前的我们建立的仓库 “git remote -v”,这里有两个仓库,一个fetch(要抓取远程仓库有的,但本地仓库没有的信息,可以运行"git fetch yourRepo",“yourRepo”来自你github上ssh地址,这里就是指代那个地址。),一个push.
fetch和pull的不同之处:
fetch是将远程仓库的某个分支拉倒本地仓库,但是并不合并,目的是查看远程和本地代码哪些不同,这样更安全一些,最后再合并,这里的合并是指本地仓库与本地项目的合并。
Git fetch origin master
git log -p master..origin/master
git merge origin/master
pull是直接将远程的某个分支的代码拉到本地仓库,并且将本地仓库与本地的项目进行合并。
提交代码
git默认规则是每次提交代码之前要先从远程仓库将代码拉下来来保持远程仓库和本地仓库的统一,采用“git pull origin master(分支名)”指令。接下来我们就可以向远程仓库提交代码了,采用“git status”查看提交哪些文件。可以一条一条添加“git add 文件名”,也可以全部添加“git add -A”,这一步只是把工作区的文件添加到缓冲区,然后提交到本地仓库“git commit -am '本次提交标示'”,接下来我们提交远程“git push origin master(分支名)”,这就搞定了!
平时使用
cd pwd 查看当前文件夹地址。
cd D:/ 定位到D盘。
cd D:/android 定位到D盘下android文件夹。
cd../ 返回上个目录。
ls 查看当前目录下的所有文件。
2.必要时可切换分支,如果无法切换,一般是因为当前项目没有提交完整。
git checkout "要切换的分支名"
(假如分支已经变成B)
3.如果切换的分支是你自己的分支,那么切换后你本地项目就会更新到最新的代码。因为你的本地仓库之前已经存在这个分支的代码了。
如果想切换别人的分支(这里其实应该不叫分支了,分支只针对自己)就要远程把代码pull 下来一份。
git pull origin "远程的分支名"
4.此时我们就可以继续编写代码了 (分支B)
每次做一个功能就提交一次。
git status 检查本地项目哪些还没有提交本地仓库
git add -A 提交所有文件到暂存区(并进行文件跟踪)
git commit -am "本次修改的标示" 将已跟踪的文件存到暂存区并提交的本地仓库。如果没有add -A操作仅仅是将项目中原有跟踪的文件提交,新增的文件没有跟踪不会提交。
git status 再次检查是否完全提交到本地仓库
假如上一步向本地仓库仍有一部分没有提交到本地仓库。git status的时候会显示出来的。那么我们就一个一个进行再次提交。
git add “文件名1 文件名2” 中间用空格隔开。 //添加提交的文件
git commit -am "本次修改的标示" //提交到本地仓库
git status //再看一下提交的状态是否全部提交
一切都提交完了,这个功能也做完了,或者也该下班了,那我们就就把他提交到远程分支上吧。
git push origin "B(远程的分支名)" 提交到远程仓库。
5.打代码,提交代码,打代码,提交代码...终于B分支要完成的功能都完成了,此时我们可以把他合并到主分支了。“git merge branchname“这个命令把分支"branchname"合并到了当前分支里面。
git工作简图:
常用命令:
1. $ git init 初始化本地仓库(或者新建本地仓库)
2. $ git remote [本地仓库别名] [远程仓库地址] 本地仓库与远程仓库建立连接,本地仓库别名不设系统默认用“origin”代替。
3. $ git remote -v 查看当前建立有几个仓库,一般有两个。一个 fitch(允许远程代码拉下来,但是不与本地项目合并),一个push。
4. $git status 检查本地项目哪些还没有提交本地仓库
5. $ git add test.txt 提交一个文件到暂存区 (并进行文件跟踪)
$ git commit -m "本次提交的标示" 提交暂存区的内容到本地仓库
6. $git add -A 提交本地项目的所有文件到暂存区(并进行文件跟踪)
$git commit -am “本次提交的标示” 将跟踪的文件提交到暂存区,并将暂存区的内容提交到本地仓库,没有跟踪不会提交的这就需要上边的git add -A来跟踪所有。
7. $ git diff HEAD -- readme.txt 查看本次与上次修改的不同
8. $ git checkout -- readme.txt 撤销工作区的修改。
9. 注意“checkout”和 “checkout --”的区别。 前者是切换分支,后者是撤销修改。
$ git checkout -- readme.txt 撤销对readme.txt的修改。
10. $ git reset HEAD readme.txt 取消暂存区的readme.txt的追踪。
11. $ git rm test.txt 然后 $ git commit -m "remove test.txt" 从版本库中删除某个文件。
12. $ git mv readme.txt readhe.txt 然后 $ git commit -m "rename readme.txt" 将版本库中的readme.txt文件改名为readhe.txt。
13 $ git log 按提交时间列出所有的更新,最近的更新排在最上面
$ git log -p -2 展开显示最近两次提交的差异。
$ git log --stat 显示简要的增改行数统计
$ git log --pretty=oneline 每次提交都显示一行,当有多次提交时便于查阅。
14 $ git commit --amend 重新提交暂存区的内容。(当某次向本地仓库提交后发现少提交一些文件,这时我们可以重新提交,如下,其实我们只是提交了一次)
用法:$ git commit -m 'initial commit'
$ git add forgotten_file
$ git commit--amend
15 $ git clone git@git.github.net:run/Test.git 从其他地方克隆一个项目到本地,可以先确定本地路径,再clone下来。
16 $ git fatch [分支名] 从某个分支抓取数据与本地项目进行比较。
17 $ git push origin 从本地仓库推送到远程仓库。
18 $ git remote show [分支名] 查看远程仓库的详细信息。
19 $ git remote rename [老分支名称] [新分支名称] 重命名某个分支的名字
20 $ git remote rm [分支名] 移除某个分支的内容。
21 $ git tag -a v1.4 -m 'my version is v1.4' 创建标签,v1.4是标签名字,-m后边的是标签的说明。
$ git tag v1.4 创建轻量级的标签。
$ git tag 显示所有标签
$ git tag -l 'v1.4.2.*' 模糊查询所有v1.4.2开头的标签
$ git show v1.4 显示标签为v1.4的版本信息。
$ git push origin v1.4 将标签发送到远端服务器
$ git push orign --tags 一次性将所有的标签发送到远端服务器。
参考:
廖雪峰git教程:http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000