If Git is completely new to you, read:
- TryGit 15-minute interactive tutorial
- Learn Git Branching interactive tutorial
- “Git for dummies” tutorial below
If you are passingly familiar with Git, but wish it was less arcane, check out:
ImageJ 及相关软件的开发很大程度上依赖于Git。有关 Git 存储库所在位置的信息,请参阅第 source code 页面。
我们为什么使用 Git?
- Git 是一流的 version control distributed 系统,因此我们使用它来记录更改以避免工作损失,并在项目开发时适当地解释/记录更改。
- Git 历史记录由源代码的“快照”组成,可用于回溯任何时间点,从而带来可重现的科学。
Git 教程
这个网站有很多关于Git的教程;请参阅左侧边栏。
改写历史
Git 可以做的最强大的事情之一就是事后重写一系列补丁。这是一项值得学习的强大技术。这里和其他地方有许多指南:
- Learn Git Branching 是一个交互式网络工具,您可以在其中完成涵盖一系列主题的练习,包括变基和重写历史记录。
- Contributing to a plugin页面的Modifying your commits部分
- Git topic branches教程的Advanced topic branch editing部分
- 来自 Atlassian 的 Rewriting history 教程
- 7.6 Git Tools - Rewriting History 来自 Git 书籍
- About Git rebase 来自 GitHub 的文章
- Using Git rebase 来自 GitHub 的文章
Git 傻瓜版
什么是 Git?
Git 是一个分布式版本控制系统(“VCS”)或源代码管理工具(“SCM”)。目的是随着时间的推移跟踪源代码的开发,以及有用的辅助信息:谁做的?什么时候?为什么?
Git 原理
源代码位于工作目录中,其中有跟踪的文件(即版本控制的文件)和未跟踪的文件(例如,.class文件;它们是从源代码生成的,因此它们是无趣的)。 开发的时间线由源代码的修订(Git 中的提交)组成。每个提交都知道其前任。在常见情况下,提交形成类似于 perl 修订的形式。通过将提交与其“父提交”进行比较(即将修订版与前一个修订版进行比较),人们可以看到“子”提交引入的更改。
提交包含跟踪文件的名称和内容、有关作者(以及提交者,不一定是作者)的信息、提交时间以及提交消息,其中作者应说明更改的原因是什么。
要进行新的提交,您首先通过“添加”(或“暂存”)来告诉 Git 您希望将哪些更改内容作为新提交的一部分,然后执行提交本身,这将打开一个编辑器,您可以在其中键入提交消息。
所有特定于 Git 的内容(例如修订版本)都存储在 repository 中,该存储库位于项目根目录的子目录 .git/ 中。
为了与其他人协作,还有“远程存储库”,您可以从其中“克隆”,并且可以通过“获取”和“推送”进行同步。
为什么我需要 Git?
Git 不仅可以记录您所做的事情,还可以轻松跟踪其他开发人员的开发,并集成这些更改(Git 中的“合并”)。
即使我们都是出色的开发人员,程序有时也会被我们的工作完全破坏。 Git 可以快速告诉您相对于当前提交所做的更改!
更多好处:
- 研究项目的历史,通过阅读他们的提交消息(即更改日志),不仅了解开发人员何时做了什么,而且还了解*为什么**。
- 恢复任何过去的修订,例如当最新版本遇到旧版本中不存在的错误(即回归)时。
- 轻松find the commit which introduced such a regression。
- 确保代码和历史记录永远不会丢失,即使您的机器出现故障——任何拥有存储库克隆的人都拥有整个历史记录的副本。
- 同时处理多个新功能或错误修复,使用分支轻松组织和切换它们。
Git 的唯一负面影响是学习它的激活障碍。一旦你精通了,Git 对于任何开发项目来说都是一笔巨大的财富。
如果您觉得使用命令行很舒服,但仍然不熟悉 Git,Git workshop 页面可能是您的完美切入点。
如果命令行不是您最喜欢的方式,您可以查看 Eclipse IDE 中的 Git 集成 EGit。
基本的 Git 命令
除了 clone 命令外,这遵循常见的工作流程:
-
git diff HEAD将显示工作目录相对于当前提交的更改。 -
git add <file>...告诉 Git 你希望下一次提交包含该文件/这些文件的当前版本。 -
git commit告诉 Git 您想要提交包含所有分阶段更改的新修订版。 -
git fetch origin同步默认远程存储库的本地副本。 -
git merge origin/main将默认远程存储库的更改集成到您的本地存储库和工作目录中(当您有未提交的更改时,切勿执行此操作!)。 -
git push origin HEAD在远程存储库中发布您的更改。
最初,您需要从某个地方开始:
git clone <URL>将创建一个新的本地存储库并从远程存储库对其进行初始化。
另请参阅更详细的 Git mini howto。
与其他版本控制系统的显着差异
如果您了解 CVS 或 Subversion,您将会遇到一些惊喜:
- 在 Git 中,每个存储库都是本地的。要发布您的更改,您还需要有一个远程存储库,并在那里“推送”您的工作。
- 在 Git 中,branches 既简单又快速。
- 在 Git 中,您是
git add内容,而不是文件。换句话说,当文件 README 已被跟踪时,git add README将告诉 Git 您希望该文件中的更改成为下一次提交的一部分。 - 在 Git 中,您永远不会尝试将远程更改集成到未提交的状态。换句话说,如果您有未提交的更改,则始终在调用
git fetch origin; git merge origin/main之前提交它们。