快速了解 Git 仓库

2018 年 10 月 3 日 开源中国


作者:王念博客

链接:

https://my.oschina.net/wangnian/blog/2218757


一、Git介绍


(1)Git是一个开源(Linus Torvalds 为了帮助管理 Linux 内核开发而开发)的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目,与常用的版本控制工具 CVS, SVN等不同,它采用了分布式版本库的方式,不必服务器端软件支持。


(2)Git 的工作区、暂存区和版本库:


  • 工作区:就是你在电脑里能看到的目录。

  • 暂存区:英文叫stage, 或index。一般存放在 ".git目录下" 下的index文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。

  • 版本库:工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。



二、安装


Git 目前支持 Linux/Unix、Solaris、Mac和 Windows 平台上运行。


(1)Windows 上安装 Git


在 Windows 平台上安装 Git 很容易,有个叫做 msysGit 的项目提供了安装包,可以到 GitHub 的页面上下载 exe 安装文件并运行(安装包下载地址:https://gitforwindows.org/)



安装成功后,就可以使用命令行的 git 工具(已经自带了 ssh 客户端,右击->"Git Bash")进行Git操作,另外还有一个图形界面的 Git 项目管理工具


(2)其他安装 


参见菜鸟教程: http://www.runoob.com/git/git-install-setup.html



三、使用


(1)基本使用



1. git init 可以在任何时候/目录中创建新的 Git 仓库,完全是本地化的



创建完后会在项目中生成“ .git ”这个子目录。 这就是你的 Git 仓库了,所有有关你的此项目的快照数据都存放在这里,eg:




2.git clone 拷贝一个 Git 仓库到本地进行查看修改:



eg.:


首先,去coding(较流行的一个Git服务器)随便找个项目,复制Git仓库地址:



然后,到本地计算机右击选择“git clone”:




3.git add 将文件添加到缓存


新项目可以使用  “git add .  ” 命令递归地添加当前工作目录中的所有文件。


4.git status 查看在你上次提交之后是否有修改



5.git diff 查看执行 git status 的结果的详细信息


git diff 比较工作目录中当前文件和暂存区域快照之间的差异,也就是修改之后还没有暂存起来的变化内容。git status 显示你上次提交更新后的更改或者写入缓存的改动, 而 git diff 则一行一行地显示这些改动具体是啥:


  • 尚未缓存的改动:git diff

  • 查看已缓存的改动: git diff --cached

  • 查看已缓存的与未缓存的所有改动:git diff HEAD

  • 显示摘要而非整个 diff:git diff --stat


6.git commit


 git add 将想要快照的内容写入缓存区, git commit 则将缓存区内容添加到仓库中。



Git 为你的每一个提交都记录你的名字与电子邮箱地址,所以第一步需要配置用户名和邮箱地址



7.git reset HEAD  取消之前 git add 已缓存的内容,但不包含在下一提交快照中的缓存。


HEAD关键字指的是当前分支最末梢最新的一个提交,也就是版本库中该分支上的最新版本.



8.git revert HEAD: 撤销最近的一个提交:


git revert会创建一个反向的新提交,可以通过参数-n来告诉Git先不要提交.


9.git rm 从已跟踪文件清单中移除某个文件:


如果只是简单地从工作目录中手工删除文件,运行 git status 时就会在 Changes not staged for commit 的提示。要从 Git 中移除某个文件,就必须要从已跟踪文件清单中移除,然后提交:



10.git mv 命令用于移动或重命名一个文件、目录、软连接:



11.git clean是从工作目录中移除没有track的文件:



12.git stash把当前的改动压入一个栈:


git stash将会把当前目录和index中的所有改动(但不包括未track的文件)压入一个栈,然后留给你一个clean的工作状态,即处于上一次最新提交处



13.git reflog 对reflog进行管理


reflog是git用来记录引用变化的一种机制,比如记录分支的变化或者是HEAD引用的变化,git会将变化记录到HEAD对应的reflog文件中,其路径为 .git/logs/HEAD, 分支的reflog文件都放在 .git/logs/refs 目录下的子目录中



(2)Git 分支管理


几乎所有版本控制系统都支持分支。使用分支可以从开发主线上分离开来,在不影响主线的同时继续工作。


1.创建分支:



2.切换分支:


当你切换分支的时候,Git 会用该分支的最后提交的快照替换你的工作目录的内容, 所以多个分支不需要多个目录。



3.合并分支:


Git 合并,不仅仅是简单的文件添加、移除的操作, 也会合并修改。你可以多次合并到统一分支, 也可以选择在合并之后直接删除被并入的分支。



合并出现冲突需要手动去修改它,然后:



4.删除分支:



5.查看分支的最后一次提交:




(3)Git log查看提交日志


Git 最为出色的是它的合并跟踪(merge tracing)能力。使用 git log 命令查看提交历史:



用 --graph 选项,开启了拓扑图选项,可以更清楚明了地查看历史中什么时候出现了分支、合并,eg.:



如果只想查找指定用户的提交日志可以使用命令:git log --author ,eg.:



如果你要指定日期,可以执行几个选项:--since 和 --before, --until 和 --after,eg.:



(4)Git 标签



1.如果你希望永远记住重要的阶段那个特别的提交快照,你可以使用 git tag 给它打上标签,eg.:



2.查看标签:



3.如果我们忘了给某个提交打标签,又将它发布了,我们可以给它追加标签,eg.:



4.指定标签信息:



5.PGP签名标签:



6.删除标签:



7.查看某个标签版本所修改的内容:



四、Git仓库


Git 并不像 SVN 那样有个中心服务器。 Git 命令都是在本地执行,如果你想通过 Git 分享你的代码或者与其他开发人员合作。 你就需要将数据放到一台其他开发人员能够连接的服务器上。



(1)添加远程库


要添加一个新的远程仓库,可以指定一个简单的名字,以便将来引用,命令格式如下:



目前流行的Git仓库有很多,使用最多的有:GitHub、Coding(兼具SVN、Git)。具体的使用如同普通的软件一样很简单,可以直接上手



(2)使用Git仓库



1.查看当前的远程库


因为不需要每次都用完整的url,所以Git为每一个remote repo的url都建立一个别名,然后用git remote来管理这个list,如果你clone一个project,Git会自动将原来的url添加进来,别名就叫做:origin



2.提取远程仓库

 


3.推送到远程仓库



① 从远程仓库下载新分支与数据


 如果有多个人向同一个remote repo push代码, Git会首先在你试图push的分支上运行git log,检查它的历史中是否能看到server上的branch现在的tip,如果本地历史中不能看到server的tip,说明本地的代码不是最新的,Git会拒绝你的push,让你先fetch,merge,之后再push,这样就保证了所有人的改动都会被考虑进来



② git merge 从远端仓库提取数据并尝试合并到当前分支



git rebase不会产生合并的提交,它会将本地的所有提交临时保存为补丁(patch)放在”.git/rebase”目录中,然后将当前分支更新到最新的分支尖端、最后把保存的补丁应用到分支上。



4.删除远程仓库



5.git pull 缺省参数== fetch + merge FETCH_HEAD



(3)自己搭建Git 仓库


你也可以搭建属于自己的Git服务器,参见:http://www.runoob.com/git/git-server.html



1、安装Git



创建一个git用户组和用户,用来运行git服务:



2、创建证书登录


收集所有需要登录的用户的公钥,公钥位于id_rsa.pub文件中,把我们的公钥导入到/home/git/.ssh/authorized_keys文件里,一行一个。如果没有该文件创建它:



3、初始化Git仓库


选定一个目录作为Git仓库:



以上命令Git创建一个空仓库,服务器上的Git仓库通常都以.git结尾。然后,把仓库所属用户改为git:



4、克隆仓库



五、目前主流的代码编译器都已集成了版本控制系统


以webstorm为例,安装了git后就可以使用:


分别是:拉取、提交



branch(分支)管理



右击项目名,就能看到git选项



ps:webstorm自身的local history可以看到编译日志(项目运行后存放在webstorm生成的“.idea文件夹”)。右击项目名,就能看到local history选项



打开后可以看到每次修改的记录,你还可以revert还原代码,如下:



开源中国征稿开始啦!


开源中国 www.oschina.net 是目前备受关注、具有强大影响力的开源技术社区,拥有超过 200 万的开源技术精英。我们传播开源的理念,推广开源项目,为 IT 开发者提供一个发现、使用、并交流开源技术的平台。


现在我们开始对外征稿啦!如果你有优秀的技术文章想要分享,热点的行业资讯需要报道等等,欢迎联系开源中国进行投稿。投稿详情及联系方式请参见:我要投稿





推荐阅读

腾讯架构大调整!七大事业群变六大事业群

JDK 11 正式发布!

可以实现内网穿透的几款工具

从 Eclipse 到 IDEA,金字塔到太空堡垒

你好,超全的 Vue 开源项目合集,签收一下


点击“阅读原文”查看更多精彩内容

登录查看更多
2

相关内容

Git 是一个为了更好地管理 Linux 内核开发而创立的分布式版本控制和软件配置管理软件。 国内外知名 Git 代码托管网站有: GitHub.com Coding.net code.csdn.net ...
【干货书】现代数据平台架构,636页pdf
专知会员服务
253+阅读 · 2020年6月15日
最新《自动微分手册》77页pdf
专知会员服务
100+阅读 · 2020年6月6日
【实用书】Python技术手册,第三版767页pdf
专知会员服务
234+阅读 · 2020年5月21日
干净的数据:数据清洗入门与实践,204页pdf
专知会员服务
161+阅读 · 2020年5月14日
算法与数据结构Python,369页pdf
专知会员服务
161+阅读 · 2020年3月4日
【电子书】C++ Primer Plus 第6版,附PDF
专知会员服务
87+阅读 · 2019年11月25日
Windows开源无人机仿真工具:AirSim1.0 入门
无人机
25+阅读 · 2019年6月8日
Kali Linux 渗透测试:密码攻击
计算机与网络安全
16+阅读 · 2019年5月13日
如何用GitLab本地私有化部署代码库?
Python程序员
9+阅读 · 2018年12月29日
Python用法速查网站
Python程序员
17+阅读 · 2018年12月16日
Python | Jupyter导出PDF,自定义脚本告别G安装包
程序人生
7+阅读 · 2018年7月17日
3月份GitHub上最热门的开源项目
大数据技术
3+阅读 · 2018年4月10日
手把手教TensorFlow(附代码)
深度学习世界
15+阅读 · 2017年10月17日
Image Segmentation Using Deep Learning: A Survey
Arxiv
44+阅读 · 2020年1月15日
Arxiv
35+阅读 · 2019年11月7日
A Comprehensive Survey on Graph Neural Networks
Arxiv
13+阅读 · 2019年3月10日
Arxiv
9+阅读 · 2018年5月7日
VIP会员
相关VIP内容
【干货书】现代数据平台架构,636页pdf
专知会员服务
253+阅读 · 2020年6月15日
最新《自动微分手册》77页pdf
专知会员服务
100+阅读 · 2020年6月6日
【实用书】Python技术手册,第三版767页pdf
专知会员服务
234+阅读 · 2020年5月21日
干净的数据:数据清洗入门与实践,204页pdf
专知会员服务
161+阅读 · 2020年5月14日
算法与数据结构Python,369页pdf
专知会员服务
161+阅读 · 2020年3月4日
【电子书】C++ Primer Plus 第6版,附PDF
专知会员服务
87+阅读 · 2019年11月25日
相关资讯
Windows开源无人机仿真工具:AirSim1.0 入门
无人机
25+阅读 · 2019年6月8日
Kali Linux 渗透测试:密码攻击
计算机与网络安全
16+阅读 · 2019年5月13日
如何用GitLab本地私有化部署代码库?
Python程序员
9+阅读 · 2018年12月29日
Python用法速查网站
Python程序员
17+阅读 · 2018年12月16日
Python | Jupyter导出PDF,自定义脚本告别G安装包
程序人生
7+阅读 · 2018年7月17日
3月份GitHub上最热门的开源项目
大数据技术
3+阅读 · 2018年4月10日
手把手教TensorFlow(附代码)
深度学习世界
15+阅读 · 2017年10月17日
Top
微信扫码咨询专知VIP会员