在工作树中使用未跟踪的编译工件切换分支

问题描述 投票:0回答:1

假设我在branch-1上工作并编译。我的工作树在各种目录中填充了一堆二进制文件。

现在我想切换到branch-2,但已经在我的工作树中编译了二进制文件(与我的工作树具有完全相同的branch-2提交版本)。如果我只运行git checkout branch-2,二进制文件仍然在工作树中,这是一个令人困惑的情况,因为HEAD指向branch-2,我有来自branch-one的二进制文件。

在保持编译文件的同时,在分支之间切换的最佳过程是什么,更准确地说:

  • 结帐branch-1并编译
  • checkout branch-2(不再有来自工作树中的branch-1的二进制文件),编译一组新的二进制文件
  • 回到branch-1并重新开始使用branch-1二进制文件(无需重新编译)
  • 回到branch-2并重新开始在branch-2制作的图书馆工作..
git
1个回答
1
投票

这听起来像你想要的是multiple worktrees

如果您不想在切换分支时重新编译,则需要将二进制文件存储在某处。将它们存储在Git某处可能不是一个好主意,因此它们应该存储在常规文件系统中;最简单的方法就是使用不同的目录树。

有几个原因将二进制文件存储在Git提交中并不是一个好主意(并且stashes是一种提交类型):

  • 它增加了存储库的大小,因为它不仅存储二进制文件的当前版本,还存储您提交的所有版本。如果你只是使用存储,并且你使用git stash popgit stash drop来摆脱存储,那么Git垃圾收集器最终会清理旧的提交,但它们仍然会存在一段时间。将它们放在常规提交中会更糟糕:膨胀会永远存在,它们很容易与编译后的文件失去同步,如果有人想要它们,它们将是无用的为不同的平台编译您的程序。
  • 因此,将编译后的文件放在.gitignore文件中是标准的。这样,Git会假装他们不在那里,并且他们不会妨碍git status调用等等。但是,忽略文件的一部分意味着Git默认不会隐藏它们,所以如果你经常放你的编译文件藏在存储器中,你可能不想使用.gitignore
  • 将编译好的文件放在藏匿处,而不是放在.gitignore中,意味着很容易将它们放入常规提交中。如果你小心的话,你可以避免这种情况,但这是一个容易犯的错误,一旦你做了,你就会遇到在常规提交中使用二进制文件的所有问题。

使用git stash的主要优点是它适用于2.6之前的Git版本。

© www.soinside.com 2019 - 2024. All rights reserved.