我们的开发环境使用多个存储库作为整个构建系统的一部分。构建会根据您 checkout 的存储库动态调整:如果不需要构建特定组件,就不要克隆它。然而,一旦你克隆了一个组件,从构建中删除它是有问题的:
git status
有没有更好的方法来删除工作目录中的文件?类似于hg co null或p4 sync ...#none?
hg co null
p4 sync ...#none
c3frrgcw1#
在发现similarquestions没有完全实现我想要的功能后,this article提供了答案:创建一个空分支。
git checkout --orphan empty git rm -rf . git commit --allow-empty -m "An empty working directory"
当然,首先要确保您已经将任何重要文件提交到了存储库中。我将此分支命名为empty,但您可以通过checkout命令给予任何名称。设置好后,您可以切换到任何分支来取回文件:
empty
checkout
git checkout master
当你需要“删除”工作目录时,提交你的更改,然后运行:
git checkout empty
这将删除所有跟踪的文件。如果您还需要删除未跟踪的文件和目录,请执行以下操作:
git clean -fdx
h6my8fg22#
您可以使用--assume-unchanged功能:
--assume-unchanged
git ls-files big-unused-component | xargs git update-index --assume-unchanged
然后,您可以删除您的文件:
rm -rf big-unused-component
第一个命令列出big-unused-component目录中所有被跟踪的文件,然后update-index --assume-unchanged在Git索引中设置“假定此文件未更改”位。然后,当您删除整个目录时,Git不会认为这是一个更改。要撤消上一个命令的效果,请使用--no-assume-unchanged重复该命令。git ls-files -v命令可以显示哪些文件以这种方式被忽略。
big-unused-component
update-index --assume-unchanged
--no-assume-unchanged
git ls-files -v
gupuwyp23#
git clean可以与各种参数一起使用,以删除未签入和提交的项,听起来比上面的任何选项都要好。创建一个新的分支似乎完全违反直觉,提交虚假的更改也是如此,这些更改会删除只是为了单独恢复的内容。对于我自己的许多CI构建脚本,我确实使用了这样的东西来确保构建区域与git的构建区域100%原始:git clean -f -x -d然而,在进一步阅读时,你的问题的混乱本质变得稍微明显一些。这听起来就像你有多个单独的仓库在一个共同的文件夹和您的'构建'过程分别使用它们所有的各种事情。我可以想出两个明显的方法来解决这个问题:1.子树合并:创建一个repo/分支,其唯一的目的是将其他repo的所需版本合并到一起,以便获得可重复的构建2.在你的'build'目录中使用符号链接到仓库,这样你就可以吹掉符号链接到仓库,你不想参加一个给定的构建,而不会吹掉仓库的存在,只是为了以后重新克隆。
git clean
git clean -f -x -d
3条答案
按热度按时间c3frrgcw1#
在发现similarquestions没有完全实现我想要的功能后,this article提供了答案:创建一个空分支。
当然,首先要确保您已经将任何重要文件提交到了存储库中。我将此分支命名为
empty
,但您可以通过checkout
命令给予任何名称。设置好后,您可以切换到任何分支来取回文件:
当你需要“删除”工作目录时,提交你的更改,然后运行:
这将删除所有跟踪的文件。如果您还需要删除未跟踪的文件和目录,请执行以下操作:
h6my8fg22#
您可以使用
--assume-unchanged
功能:然后,您可以删除您的文件:
第一个命令列出
big-unused-component
目录中所有被跟踪的文件,然后update-index --assume-unchanged
在Git索引中设置“假定此文件未更改”位。然后,当您删除整个目录时,Git不会认为这是一个更改。要撤消上一个命令的效果,请使用
--no-assume-unchanged
重复该命令。git ls-files -v
命令可以显示哪些文件以这种方式被忽略。gupuwyp23#
git clean
可以与各种参数一起使用,以删除未签入和提交的项,听起来比上面的任何选项都要好。创建一个新的分支似乎完全违反直觉,提交虚假的更改也是如此,这些更改会删除只是为了单独恢复的内容。对于我自己的许多CI构建脚本,我确实使用了这样的东西来确保构建区域与git的构建区域100%原始:
git clean -f -x -d
然而,在进一步阅读时,你的问题的混乱本质变得稍微明显一些。这听起来就像你有多个单独的仓库在一个共同的文件夹和您的'构建'过程分别使用它们所有的各种事情。
我可以想出两个明显的方法来解决这个问题:
1.子树合并:创建一个repo/分支,其唯一的目的是将其他repo的所需版本合并到一起,以便获得可重复的构建
2.在你的'build'目录中使用符号链接到仓库,这样你就可以吹掉符号链接到仓库,你不想参加一个给定的构建,而不会吹掉仓库的存在,只是为了以后重新克隆。