• 1. GIT基本使用方法Tianmin 2012-2-10
  • 2. 第2页 共28页目录 Git 简介1 Git 安装配置2 Git 基本使用3 TortoiseGit4
  • 3. 1.Git简介如想深入了解GIT,请参考《Pro Git Book》 http://progit.org/book/ 以下简要介绍3点: 1.1 GIT对比 1.2 GIT版本号 1.3 GIT文件状态 第3页 共28页
  • 4. 第4页 共28页1.1 版本管理工具变迁GIT是分布式的管理系统。 GIT操作速度快,可在离线状态下工作。
  • 5. 第5页 共28页1.2 Git版本号每次变更,SVN比较的是文件差异,而GIT直接保存文件快照(存储更快速) 每个"文件快照"都对应一个版本。GIT版本号是40位的一串数据,如:24b9da6552552987aa493b52f8696cd6d3b00373 GIT版本号实际上是对文件目录内容SHA-1的哈希值,它标识版本并比较不同版本间的差异情况,可保证GIT操作的快速性。
  • 6. 第6页 共28页1.3 GIT文件的各种状态GIT有3个存储区:-- 文件有四个状态:untracked/unmodified/modified/stagedStaging, 也叫index file或Cache,是一种中间过渡状态,用来存储待提交的代码。
  • 7. 第7页 共28页1.3 GIT文件状态变迁通过 Git add/Commit/Checkout等命令可改变文件状态 通过 Git pull/push, 可使本地用户和server上项目同步
  • 8. 第8页 共28页2. GIT安装配置安装过程很简单,如下: ubuntu下 sudo apt-get install git-core openssh-client CentOS下 sudo yum install git-core openssh-client windows下 先安装mygit 如需图形界面,可再安装TortoiseGit 在安装过程中选择ssh client时,请勾选OpenSSH
  • 9. 2. GIT安装配置配置包括2方面: 用户标识 和 用户密钥 在Linux命令行下, 或在windows下打开Git Bash运行命令来配置。 用户标识: $ git config --global user.name “your username” $ git config --global user.email “your email address” 用户密钥 $ ssh-keygen –t rsa 把生成的ida_rsa.pub文件(在 ~/.ssh目录下)拷贝出来,更名为“yourusername”.pub并发给管理员。 自此安装配置结束第9页 共28页
  • 10. 3.Git基本使用3.1 从服务器下载代码 3.2 变更并提交到本地仓库 3.3 查看状态和比较差异 3.4 同步到服务器 附: Git基本命令表第10页 共28页
  • 11. 3.1 从服务器下载代码请询问管理员拿到服务器仓库的地址,使用git clone命令下载代码 [ghl@ghl]:~$ mkdir myproject [ghl@ghl]:~$ cd myproject [ghl@ghl]:~/myproject$ git clone git@10.78.28.216:foo.git [ghl@ghl]:/home/ghl/myproject$ cd foo git@10.78.28.216:foo.git 就是仓库地址。 和SVN Checkout不同,Clone包含了仓库和文件(请参看上一章的版本管理工具变迁图)。 如何从服务器上下载指定版本? GIT是分布式系统,因此”git clone”下来的仓库已包含了所有的版本。 可用”git log”命令查看仓库的所有版本记录。 [ghl@ghl]:~/myproject/foo(master) $ git log第11页 共28页
  • 12. 3.1 切换到旧版本 和 创建tags切换到某个旧的版本,可执行git checkout [ghl@ghl]:~/myproject/foo(master)$ git checkout 3b662d3c2c66d73c5db3ea35bcab620bdf930b52 [ghl@ghl]:~/myproject/foo((3b662d……) )$ \ 可以看到,已经切换到该版本了。 显示出来的版本号是40位的数据长串,不易记住,可通过“git tag”命令更名,方便记忆。如: [ghl@ghl]:~/myproject/foo(master)$ git tag V1.00 3b662d3c2c66d73c5db3ea35bcab620bdf930b52g [ghl@ghl]:~/myproject/foo(master)$ git checkout V1.00 [ghl@ghl]:~/myproject/foo((V1.00) )$ \ 执行 git tag命令之后, V1.00就是该版本的别名了。第12页 共28页
  • 13. 第13页 共28页3.2 变更并提交到本地仓库变更文件,包括: 修改(vim)/添加(git add)/删除(git rm)/重命名(git mv) [ghl@ghl]:~/myproject/foo (master) $ vim hello.c [ghl@ghl]:~/myproject/foo (master) $ git add print.c 或使用 git add . 添加所有untracked文件 [ghl@ghl]:~/myproject/foo (master) $ git rm print.c [ghl@ghl]:~/myproject/foo (master) $ git mv print.c show.c 完成变更后,先提交到Staging, 再提交到仓库, 这2步可用git commit -am “注释”一次完成)"git add”有两个作用: 添加untracked文件 --> tracked 将working中的变更提交到 --> Staging git commit 的作用是 将Staging提交到 --> 仓库 git commit -a 还包含 将working提交到 --> Staging 一般使用 git commit -am “注释”来1次就完成2个提交
  • 14. 3.2 变更并提交到本地仓库举例: 添加了新文件,顺序操作 [ghl@ghl]:~/myproject/foo (master) $ vim addfile.txt [ghl@ghl]:~/myproject/foo (master) $ git add . [ghl@ghl]:~/myproject/foo (master) $ git commit -m "添加新文件" 或直接用git commit -a 一次提交 [ghl@ghl]:~/myproject/foo (master) $ vim repairfile.txt [ghl@ghl]:~/myproject/foo (master) $ git commit -am "一般变更文件" 注:-a参数不能添加新的untracked文件,如果需要添加新文件,请先执行add第14页 共28页
  • 15. 第15页 共28页3.2 变更并提交到本地仓库提交后发现错了想反悔,可执行git reset 或 git checkout。 [ghl@ghl]:~/myproject/foo (master) $ git reset HEAD is now at 3957e51 shibu Git reset命令可带参数, 如下: $ git reset --hard HEAD~ 撤销working、indexfile、repository的上1次提交 $ git reset 撤销commit和index file的上1次提交,保留working tree $ git reset --soft HEAD~2 撤销Repository的上2次提交, 保留working和indexfile “HEAD~n“ 表示回退到第n次提交前的状态; 直接切换到从提交前的任何状态 [ghl@ghl]:~/myproject/foo (master) $ git checkout V1.00
  • 16. 3.3 查看状态和比较差异GIT STATUS是一个很常用的命令,可查看即时状态: Untracked 还沒有被追踪的新文件 Changed but not updated 有修改但是沒有加入staging的文件 Changes to be committed (staging area) 已经加入staging的文件第16页 共28页git diff 显示working和Staging的差异 git diff --cached 显示Staging和本地仓库的差异 git diff HEAD 显示working和本地仓库的差异在提交前,如想了解working、index file、本地仓库的文件差异可执行“git diff”查看(即自己修改了什么)
  • 17. 第17页 共28页3.4 同步到服务器执行git push同步本地仓库到服务器。 [ghl@ghl]:~/myproject/foo (master) $ git push 如果有多个用户push,后push的会失败。 解决这冲突,可先执行git pull,同步服务器上的新变更到本地。 git pull会Merge冲突文件。 打开冲突文件并修改保存,即可再提交到本地仓库,然后push成功。 [ghl@ghl]:~/myproject/foo (master) $ git pull [ghl@ghl]:~/myproject/foo (master) $ vim xxx.c [ghl@ghl]:~/myproject/foo (master) $ git commit –am “your comments” [ghl@ghl]:~/myproject/foo (master) $ git push
  • 18. 第18页 共28页附: Git基本命令表命令注释git clone url/path将server上的仓库clone到本地仓库git log查看所有server上提交记录(从你clone时为止)git add .添加Untracked到-->tracked 添加变更到staginggit commit 将Staging中待提交的文件提交到本地仓库git status查看文件状态git diff 查看文件具体差异情况git pull将server上的仓库同步到本地仓库git push将本地仓库推送到remote的server仓库中基本命令表
  • 19. 第19页 共28页4.TortoiseGit4.1 从服务器下载代码 4.2 变更并提交到本地仓库 4.3 同步到服务器 在Windows下,不习惯命令的人可以使用TortoiseGit,图形界面操作
  • 20. 第20页 共28页4.1 从服务器下载代码请询问管理员拿到服务器仓库的地址,右键单击使用“git clone”命令下载代码
  • 21. 第21页 共28页4.1 从服务器下载代码切换到某个旧的版本,可执行: “右键->TortoiseGit->Switch/Checkout…”Branch:需要切换到的分支 Tags:需要切换搭配的版本(“右键->TortoiseGit->Create tags”) Commit:需要切换到指定哪一次提交记录时的状态
  • 22. 第22页 共28页4.2 变更文件并提交到本地仓库变更包括添加、删除、修改、重命名文件当添加新文件时:执行上图 “Add…”命令 当删除文件时:执行上图“Clean up…”命令
  • 23. 第23页 共28页4.2 变更文件并提交到本地仓库选中git commit->master(master这里是主分支)在提交之前想查看文件变更情况 可执行:git diff(右键—>TortoiseGit-->git diff)/ (右键—>TortoiseGit-->git diffprevious version)
  • 24. 第24页 共28页4.2 变更文件并提交到本地仓库提交(commit)后,想回退 每次提交的记录都在上面,想回退到第几次提交直接点击即可
  • 25. 第25页 共28页4.3 同步到服务器仓库推送(push)到server repository 执行git commit –>”master”顺序往下来操作即可; 右键->TortoiseGit->git push
  • 26. 第26页 共28页4.3 同步到服务器仓库关于冲突:如果有多个用户push,后push的会失败。 要解决这种冲突,右键->Git Sync…单击pull之后就会在out changeList窗口显示差异文件列表,然后双击文件打开手动merge,确认修改后先commit到本地仓库后,再推送(push)到server仓库中
  • 27. 谢 谢 大 家 !Tianmin