diff --git a/sources/使用分支.md b/sources/使用分支.md index 32c75f5..14dc23c 100644 --- a/sources/使用分支.md +++ b/sources/使用分支.md @@ -143,7 +143,7 @@ git checkout -b ### 讨论 -`git checkouth`和`git branch`是一对好基友。当你想要创建一个新功能时,你用`git branch`创建分支,然后用`git checkout`查看。你可以在一个仓库中用`git checkout`切换分支,同时开发几个功能。 +`git checkout`和`git branch`是一对好基友。当你想要创建一个新功能时,你用`git branch`创建分支,然后用`git checkout`查看。你可以在一个仓库中用`git checkout`切换分支,同时开发几个功能。 diff --git a/sources/保持代码同步.md b/sources/保持代码同步.md index 1f15efa..22183a4 100644 --- a/sources/保持代码同步.md +++ b/sources/保持代码同步.md @@ -203,7 +203,8 @@ git pull --rebase 事实上,使用`--rebase`的pull的工作流是如此普遍,以致于你可以直接在配置项中设置它: ``` -git config --global branch.autosetuprebase always +git config --global branch.autosetuprebase always # In git < 1.7.9 +git config --global pull.rebase true # In git >= 1.7.9 ``` 在运行这个命令之后,所有的`git pull`命令将使用`git rebase,`而不是`git merge`。 @@ -291,4 +292,4 @@ git push origin master > > 如果你觉得文章对你有帮助,欢迎点击右上角的***Star***:star2:或***Fork***:fork_and_knife:。 > -> 如果你发现了错误,或是想要加入协作,请参阅[Wiki协作说明](https://github.com/geeeeeeeeek/git-recipes/issues/1)。 \ No newline at end of file +> 如果你发现了错误,或是想要加入协作,请参阅[Wiki协作说明](https://github.com/geeeeeeeeek/git-recipes/issues/1)。 diff --git a/sources/果壳中的Git.md b/sources/果壳中的Git.md new file mode 100644 index 0000000..5c5c5e1 --- /dev/null +++ b/sources/果壳中的Git.md @@ -0,0 +1,77 @@ +# 什么是Git + +> BY houkensjtu([houkensjtu@github](https://github.com/houkensjtu)) +> +> 这是一篇在[原文(BY atlassian)](https://www.atlassian.com/git/tutorials/what-is-git)基础上演绎的译文。除非另行注明,页面上所有内容采用知识共享-署名([CC BY 2.5 AU](http://creativecommons.org/licenses/by/2.5/au/deed.zh))协议共享。 + +Git是目前世界上被最广泛使用的现代软件版本管理系统。Git本身亦是一个成熟并处于活跃开发状态的开源项目,它最初是由Linux操作系统内核的创造者Linus Torvalds在2005年创造。今天惊人数量的软件项目依赖Git进行版本管理,这些项目包括开源以及各种商业软件。Git在职业软件开发者中拥有良好的声誉,Git目前支持绝大多数的操作系统以及IDE(Integrated Development Environments)。 + +Git使用分散式架构,是分散式版本管理DVCS(Distributed Version Control System)的代表。相较于例如CVS或者Subversion等集中式版本管理软件,Git并不是将代码的所有修改历史保存在中心服务器中。在Git中取而代之的是,所有参与项目的开发者都拥有各自的代码完全拷贝,并在自己的拷贝上进行软件开发。 + +除了分散式的特点之外,Git的设计也针对性能,安全性和柔软性作了特别优化。 + +### 性能 + +Git的底层性能相较于其他版本管理软件有强大的优势。在Git中所有的操作包括提交修改,创建分支,融合分支,以及求取差分都经过了性能优化。这些优化来自于Git的开发者对实际一般代码开发模式的深度认识和广泛知识。 + +不同于某些版本管理软件,Git在决定代码修改历史以及保存形式的时候不会被文件名的变化所愚弄,Git关注的是文件的内容本身。在实际操作中,代码文件经历频繁的再命名,分解和合并。Git使用一种混合了差分编码(delta encoding,仅保存代码修改的差分),压缩,直接保存,以及版本元数据(version metadata objects)的管理方式。 + +分散式的架构也给Git带来了极大的性能优势。 + +比如说,现有一名开发成员Alice对代码进行了一些改动,添加了一些在2.0版本中准备公开的功能,然后将这些修改以及一份简单的说明进行了提交。随后她又增加了一些另外的新功能,并又作了一次新提交。显然这两次修改在版本历史中被分开各自进行了保存。在这之后Alice把代码切换到了1.3版本,修复了一些旧版本中的Bug(这和她新添加的功能没有关系)。这次修复的目的是为了让团队可以在公开2.0版本之前,释放一个1.3.1版本来解决1.3版本中的Bug问题。Alice马上又可以回到她之前进行的2.0版本功能开发之中(通过切换代码分支),这些操作由于Git的分散属性,都不需要通过网络来连接到中央服务器进行,她甚至可以在飞机中完成这一切。当她完成所有工作,只需要向远程的代码库推送(Push)自己的修改即可。 + +### 安全性 + +Git将保持所管理代码的整合性作为首要要务。所有的文件内容,文件相互关系,以及文件目录结构,版本,标签以及修改,都经过加密哈希校验算法(SHA1)的保护。这可以防止各种意外的代码修改失误,或者是第三者的恶意修改,使得代码修改历史完全可追迹。 + +使用Git你可以确信你拥有代码的完整修改历史。 + +某些其他的版本管理软件对发布后的代码不进行任何保护。这对于完全依赖于软件开发的团队来说可以是一种非常严重的安全脆弱性问题。 + +### 柔软性 + +Git的关键设计目标之一就是保持柔软性。Git在以下方面都展现出了其柔软性:支持各种非线性的开发工作流程,对或大或小的软件项目都可以良好支持,以及兼容各种操作系统和协议。 + +Git支持将分支和标签作为一级基本对象(不同于SVN),所以所有对分支和标签的操作也都会被保存到修改历史中。并不是所有的版本管理软件支持这一层面的追迹。 + +### 使用Git进行版本管理 + +Git对今天绝大多数软件开发团队来说都是最佳的选择。虽然每个团队都有各自的特点和目标,但是这里我们依然可以列举一些对他们来说Git优于其他选择的理由: + +#### Git很棒 + +Git兼备了功能性,高性能,安全性和柔软性,这些是很多软件开发团队以及个人所需要的要素。我们已经在上面详细讨论了这些特性。对很多软件开发团队来说,以以上标准货比三家的最终结果都是选择Git。 + +#### Git已经成为了默认的行业标准 + +Git是受到最广泛使用和支持的版本管理软件。这使得Git在以下这些方面具有极大的吸引力。我们在Atlassian(此Tutorial作者所处的公司)的大多数代码都是用Git来进行管理的。 + +绝大多数的软件开发者都有过Git的使用经历,很大一部分在校或者刚刚毕业的学生甚至只用过Git进行版本管理。虽然在一些公司开发成员可能在从其他版本管理软件迁移到Git的过程中要经历比较陡峭的学习曲线,但是大多数开发者以及他们未来的潜在开发者(学生)都已经具备了使用Git的基本技能,这就意味着他们不再需要额外的培训。 + +Git的普及还带来很多其他的好处,Git的市场占有率意味着很多第三方的服务和IDE都开始默认支持Git。比如我们的DVCS客户端[Source +Tree](https://www.atlassian.com/software/sourcetree),项目开发管理软件[JIRA](https://www.atlassian.com/software/jira),以及代码托管服务[Bitbucket](https://www.atlassian.com/software/bitbucket)。 + +如果你是一个开发新手并期待在未来构建自己的专业开发技能,Git毫无疑问是你在版本管理上的第一选择。 + +#### Git是一个高质量的开源项目 + +Git本身是一个拥有良好支持和管理的开源软件项目。Git的开发者在过去的十年中展现了良好的公平性,成熟的开发手段以保障其用户将来的需求,以及定期的更新以保持其可用性和功能性。开源的特性使得项目代码本身受到无微不至的检查,现在有无数的企业都依赖于Git的超高软件开发质量。 + +Git同时享有极好的社区支持和庞大的用户群体。你可以找到各种内容深入浅出的学习资料,包括书籍,教程,以及专题网站。甚至还有广播以及视频教程存在。 + +保持开源降低了编程爱好者的投入成本因为他们不需要花一分钱来使用Git。在开源项目中,Git无疑扮演了前一世代版本管理软件,比如SVN和CVS,的成功接班人。 + +#### 对于Git的批评意见 + +对于Git的一个常见批评是它非常难以掌握。Git中的某些术语对刚上手的朋友或者是使用其他系统的朋友可能会比较陌生,比如说,`revert`这个命令在Git中和在SVN或者CVS中具有不同的含义。不过尽管如此,Git依然向用户提供了非常强大的功能。学习掌握这些功能也许会花一些时间,但是一旦你学会了这些技能,它们会帮助你大大提高团队的开发效率。 + +对于曾经使用非分散式版本管理的团队来说,保存代码的中央服务器可能是他们所不想舍去的。不过,虽然Git的确是分散式的架构设计,但是你依然可以设立一个“官方”的代码库来强制保存所有的修改。使用Git时,由于所有的开发者都拥有完整的代码库拷贝,所以他们的工作不会被中央服务器的性能甚至有无左右。即便他们下线或者在外,他们依然可以随时查看代码库的修改历史。得益于Git的分散式特性,你可以保持自己原有的工作方式但得到Git带来的额外好处,有时候你甚至会发现自己不曾意识到有些事居然还可以这样干。 + +现在你明白了什么是版本管理,什么是Git以及为什么我们要选择使用Git,接下来你可以选择阅读下一篇文章,在那里我们将解释Git给团队和业务所带来的好处。 + + +> 这篇文章是[**『git-recipes』**](https://github.com/geeeeeeeeek/git-recipes/)的一部分,点击[**目录**](https://github.com/geeeeeeeeek/git-recipes/wiki/)查看所有章节。 +> +> 如果你觉得文章对你有帮助,欢迎点击右上角的***Star***:star2:或***Fork***:fork_and_knife:。 +> +> 如果你发现了错误,或是想要加入协作,请参阅[Wiki协作说明](https://github.com/geeeeeeeeek/git-recipes/issues/1)。 diff --git a/wiki/catagory.md b/wiki/catagory.md index 1e24691..58387fa 100644 --- a/wiki/catagory.md +++ b/wiki/catagory.md @@ -6,13 +6,13 @@ 本篇完全面向入门者。我假设你从零开始创建一个项目并且想用 Git 来进行版本控制,我们会讨论如何在你的个人项目中使用 Git ,比如如何初始化你的项目,如何管理新的或者已有的文件,如何在远端仓库中储存你的代码。 -- **第1章** [快速指南](https://github.com/geeeeeeeeek/git-recipes/wiki/2.1-%E5%BF%AB%E9%80%9F%E6%8C%87%E5%8D%97) -- **第2章** [创建代码仓库](https://github.com/geeeeeeeeek/git-recipes/wiki/2.2-%E5%88%9B%E5%BB%BA%E4%BB%A3%E7%A0%81%E4%BB%93%E5%BA%93) -- **第3章** [保存你的更改](https://github.com/geeeeeeeeek/git-recipes/wiki/2.3-%E4%BF%9D%E5%AD%98%E4%BD%A0%E7%9A%84%E6%9B%B4%E6%94%B9) -- **第4章** [检查仓库状态](https://github.com/geeeeeeeeek/git-recipes/wiki/2.4-%E6%A3%80%E6%9F%A5%E4%BB%93%E5%BA%93%E7%8A%B6%E6%80%81) -- **第5章** [检出之前的提交](https://github.com/geeeeeeeeek/git-recipes/wiki/2.5-%E6%A3%80%E5%87%BA%E4%B9%8B%E5%89%8D%E7%9A%84%E6%8F%90%E4%BA%A4) -- **第6章** [回滚错误的修改](https://github.com/geeeeeeeeek/git-recipes/wiki/2.6-%E5%9B%9E%E6%BB%9A%E9%94%99%E8%AF%AF%E7%9A%84%E4%BF%AE%E6%94%B9) -- **第7章** [重写项目历史](https://github.com/geeeeeeeeek/git-recipes/wiki/2.7-%E9%87%8D%E5%86%99%E9%A1%B9%E7%9B%AE%E5%8E%86%E5%8F%B2) +- **第1章** [快速指南](https://github.com/geeeeeeeeek/git-recipes/wiki/2.1-%E5%BF%AB%E9%80%9F%E6%8C%87%E5%8D%97) +- **第2章** [创建代码仓库](https://github.com/geeeeeeeeek/git-recipes/wiki/2.2-%E5%88%9B%E5%BB%BA%E4%BB%A3%E7%A0%81%E4%BB%93%E5%BA%93) +- **第3章** [保存你的更改](https://github.com/geeeeeeeeek/git-recipes/wiki/2.3-%E4%BF%9D%E5%AD%98%E4%BD%A0%E7%9A%84%E6%9B%B4%E6%94%B9) +- **第4章** [检查仓库状态](https://github.com/geeeeeeeeek/git-recipes/wiki/2.4-%E6%A3%80%E6%9F%A5%E4%BB%93%E5%BA%93%E7%8A%B6%E6%80%81) +- **第5章** [检出之前的提交](https://github.com/geeeeeeeeek/git-recipes/wiki/2.5-%E6%A3%80%E5%87%BA%E4%B9%8B%E5%89%8D%E7%9A%84%E6%8F%90%E4%BA%A4) +- **第6章** [回滚错误的修改](https://github.com/geeeeeeeeek/git-recipes/wiki/2.6-%E5%9B%9E%E6%BB%9A%E9%94%99%E8%AF%AF%E7%9A%84%E4%BF%AE%E6%94%B9) +- **第7章** [重写项目历史](https://github.com/geeeeeeeeek/git-recipes/wiki/2.7-%E9%87%8D%E5%86%99%E9%A1%B9%E7%9B%AE%E5%8E%86%E5%8F%B2) **第3篇 远程团队协作和管理** - **第1章** 快速指南