![](/img/trans.png)
[英]Is the clone repository created by `git clone` without `--bare` a repository with a working directory?
[英]Convert a Git working directory to a bare-like repository?
我们的开发环境使用多个存储库作为整体构建系统的一部分。 构建动态地根据您检出的存储库进行调整:如果您不需要构建特定组件,则不要克隆它。
然而,一旦你已经克隆一个组成部分,从构建删除它是有问题的:
git status
将显示未提交的更改 有没有更好的方法来删除工作目录的文件? 类似于hg co null
或p4 sync ...#none
?
在找到类似的 问题并没有完全按照我的意愿行事之后, 本文提供了答案:创建一个空分支。
git checkout --orphan empty
git rm -rf .
git commit --allow-empty -m "An empty working directory"
当然,请确保您已先将任何重要文件提交到您的仓库。 我把这个分支称为empty
,但你可以通过checkout
命令给它任何名字。
设置完成后,您可以切换到任何分支以恢复文件:
git checkout master
当您需要“删除”工作目录时,提交更改,然后运行:
git checkout empty
这将删除所有跟踪的文件。 如果您还需要删除未跟踪的文件和目录,请按照以下步骤操作:
git clean -fdx
您可以使用--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
命令可以显示以这种方式忽略了哪些文件。
git clean
可以与各种参数一起使用来删除未签入和提交的项目,听起来比上面提到的任何选项都要好得多。 创建一个新的分支似乎完全违反直觉,因为提交了错误的更改,这些更改会删除要单独恢复的内容。
对于我自己的许多CI构建脚本,我确实使用类似这样的东西来确保构建区域对于git具有的100%纯净: git clean -f -x -d
但是,经过进一步阅读,您问题的混乱性质会变得更加明显。 听起来你在一个公共文件夹中有多个单独的存储库,而你的“构建”过程分别将它们全部用于各种事物。
我可以想出两个明显的方法来解决这个问题:
1.子树合并:创建一个repo / branch,其唯一目的是为了子树合并所需的其他repos版本,以便你有一个可重复的构建
2.使用符号链接到你的“build”目录中的repos,这样你就可以将符号链接清除到你不想参与给定构建的repo,而不会破坏repo的存在只是为了以后重新编译。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.