假设我在branch-1
上工作并编译。我的工作树在各种目录中填充了一堆二进制文件。
现在我想切换到branch-2
,但已经在我的工作树中编译了二进制文件(与我的工作树具有完全相同的branch-2
提交版本)。如果我只运行git checkout branch-2
,二进制文件仍然在工作树中,这是一个令人困惑的情况,因为HEAD指向branch-2
,我有来自branch-one
的二进制文件。
在保持编译文件的同时,在分支之间切换的最佳过程是什么,更准确地说:
branch-1
并编译branch-2
(不再有来自工作树中的branch-1
的二进制文件),编译一组新的二进制文件branch-1
并重新开始使用branch-1
二进制文件(无需重新编译)branch-2
并重新开始在branch-2
制作的图书馆工作..这听起来像你想要的是multiple worktrees。
如果您不想在切换分支时重新编译,则需要将二进制文件存储在某处。将它们存储在Git某处可能不是一个好主意,因此它们应该存储在常规文件系统中;最简单的方法就是使用不同的目录树。
有几个原因将二进制文件存储在Git提交中并不是一个好主意(并且stashes是一种提交类型):
git stash pop
或git stash drop
来摆脱存储,那么Git垃圾收集器最终会清理旧的提交,但它们仍然会存在一段时间。将它们放在常规提交中会更糟糕:膨胀会永远存在,它们很容易与编译后的文件失去同步,如果有人想要它们,它们将是无用的为不同的平台编译您的程序。.gitignore
文件中是标准的。这样,Git会假装他们不在那里,并且他们不会妨碍git status
调用等等。但是,忽略文件的一部分意味着Git默认不会隐藏它们,所以如果你经常放你的编译文件藏在存储器中,你可能不想使用.gitignore
。.gitignore
中,意味着很容易将它们放入常规提交中。如果你小心的话,你可以避免这种情况,但这是一个容易犯的错误,一旦你做了,你就会遇到在常规提交中使用二进制文件的所有问题。使用git stash
的主要优点是它适用于2.6之前的Git版本。