首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在工作树中切换具有未跟踪编译工件的分支

在工作树中切换具有未跟踪编译工件的分支
EN

Stack Overflow用户
提问于 2017-12-21 17:20:28
回答 1查看 52关注 0票数 0

假设我在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-produced库的工作。
EN

回答 1

Stack Overflow用户

发布于 2017-12-21 17:56:01

听起来你想要的是多工作树

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

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

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

为此使用git stash的主要优点是它可以在2.6之前的Git版本上工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47929851

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档