我知道编辑这个网站吗?

git

If Git is completely new to you, read:

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 可以做的最强大的事情之一就是事后重写一系列补丁。这是一项值得学习的强大技术。这里和其他地方有许多指南:

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之前提交它们。