我仍然很难理解Git中的staging概念。
是否可以将其与SVN进行类比?在Git中,拥有stage级别的主要目的是什么?
git add -p
。)据我所知,在SVN中进行“部分”提交的唯一方法是在单个文件级别上,或通过手动备份文件并暂时还原您不想提交的更改。git commit -a ...
。相似之处:
应该作为存储库的一部分的文件必须添加以进行跟踪。这两个工具都使用add
命令来完成此操作。添加文件意味着准备提交。
不同之处:
在添加文件时,Git允许更多的详细信息。您可以决定添加整个文件或不同的代码行。 将文件添加到索引或阶段可以提供更多的灵活性。SVN会自动提交已添加到存储库中的文件的所有更改。Git将每个提交操作关联的更改(行或文件)的决策留给用户。换句话说:Git中的下一个commit只包含已经被暂存的那些更改(行或文件),而不管文件的跟踪状态如何。SVN会自动包括所有已跟踪文件上的更改。
附加信息:
尝试阅读一些描述Git工作流程的文章,例如Oliver Steele的文章。但要注意,使用Git的方法不止一种 - 有很多种。如果您愿意,可以像使用SVN一样使用Git。
不要指望在短时间内就能理解Git的哲学。我花了一年时间才开始使用它,我仍然学习新的使用方法。如果你从SVN思维方式成长起来,这可能会更难。有大量的材料可供使用:文章、视频等等 - 花点时间尝试其中一些。以下是我收集的列表中的一些选择。
git pull
的问题-->有一个命令git pull --rebase
,它避免了自动创建的合并提交。 - JJDgit add
会将文件放入 stage 或者说是加入到 index 中。 - JJD你正在处理某个部分并在整个项目中做了很多更改。在测试完整个项目之前,你不想立即提交它们。但是,这些更改通常足够独立,以使多个逻辑提交比一个大提交更好。这时,你可以暂存选择的部分并进行多次提交。
在调试时,暂存特别有帮助。你可以散布日志语句以跟踪错误源。然后,你进行修复,并使用这些日志语句再次进行测试。但是然后,在删除这些日志语句之前,你想先提交修复。
另一个证明它很有用的情况是当你正在做某事时,发现与之无关的内容(例如,拼写错误),需要快速解决以便继续工作。
还有其他几种类似的情况,一旦你掌握了它,你可能就不能再使用不具备此概念的任何东西 :)。
PS:我根本没有使用过 SVN,所以无法对两者进行比较。
git commit <specific files>
将多个更改分成多个提交。当然,这会经过暂存区,但仅在直接提交之前很短暂地经过暂存区。 - Kaz