我使用git与SVN存储库进行交互.我有几个git分支用于我工作的不同项目.
现在,每当我使用'git checkout'从一个分支切换到另一个分支时,来自前一个分支的所有已编译的可执行文件和目标文件仍然存在.我想看到的是从分支A切换到B导致一个树,其中包含我上次在分支B上工作时的所有目标文件和二进制文件.
有没有办法处理这个而不创建多个git存储库?
更新:我知道可执行文件和二进制文件不应该最终存储在存储库中.我有点失望的事实是git中的所有分支内容对我来说都是无用的,因为事实证明我必须为我想要启动的每个分支克隆我的代理git存储库.我已经为SVN做了一些事情,希望用git来避免.当然,我没有必要这样做,但是这会导致我在分支之间切换时大部分时间都做新的制作(不好玩).
你想要的是一个完整的上下文,而不仅仅是分支......这通常超出了版本控制工具的范围.最好的方法是使用多个存储库.
不要担心这种效率低下......让你的第二个存储库成为第一个存储库的克隆.Git会自动使用链接来避免在磁盘上有多个副本.
这是一个让你想要的黑客
由于您有单独的obj目录,因此可以使用以下内容修改Makefile以使基本位置动态化:
OBJBASE = `git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1\//'` OBJDIR = "$(OBJBASE).obj" # branch master: OBJBASE == "master/", OBJDIR == "master/.obj" # non-git checkout: OBJBASE == "", OBJDIR == ".obj"
那将是您的分支名称到OBJBASE,您可以使用它来构建您的实际objdir位置.我会留给你修改它以适应你的环境,并使它对你的Makefile的非git用户友好.
这不是的git或svn特定的 - 你应该有你的编译器和其它工具直接像.o文件的中间文件输出到不在版本控制下的目录.
要保持同一个仓库的多个签出,您可以使用git --work-tree.例如,
mkdir $BRANCH.d GIT_INDEX_FILE=$BRANCH.index git --work-tree $BRANCH.d checkout $BRANCH