有git clone一个选项-n可以防止HEAD在克隆存储库后签出。是否有可能手动执行此操作?
编辑我认为该选项-n在手册中的阅读效果比实际更好:使用-n我所有的工具进行克隆后显示我仍然驻留在主分支上;唯一的区别是所有文件都显示为已删除。这与我称之为“未签出”的情况并不完全相同。
所以也许我应该删除HEAD?
有git clone一个选项-n可以防止HEAD在克隆存储库后签出。是否有可能手动执行此操作?
编辑我认为该选项-n在手册中的阅读效果比实际更好:使用-n我所有的工具进行克隆后显示我仍然驻留在主分支上;唯一的区别是所有文件都显示为已删除。这与我称之为“未签出”的情况并不完全相同。
所以也许我应该删除HEAD?
最简单的解决方案是克隆它:
git clone --bare your_repo bare_repo
(并删除您签出的回购)
基本上,您需要将您的存储库转换为一个裸露的存储库,根据这个问题,可以通过以下方式手动完成:
- 将
.git/config文件更改为拥有bare = true而不是bare = false- 删除文件
your_repo/*以外的内容.git- 将
.git目录内容移入your_repo/和删除.git目录
另请参阅Git: Convert normal to bare repository,正如MikeSep在评论中提到的那样。
如果您需要取消结帐,请继续bare使用false,然后简单地删除除.git. 那应该像一个git clone -n.
我将原始问题阅读为想要保留回购,但删除工作树。当您想在完成一些工作后将项目放在次要位置时,这很有用。
一种解决方案是创建一个带有空工作树的分支,然后检查空分支:
git checkout --orphan archived
git reset --hard
git commit -m "Project is archived" --allow-empty
解释:
git checkout --orphan archived创建分支archived,与项目无关的历史。git reset --hard删除工作树中存在的版本控制文件。git clean -fd它保留未版本控制的文件,如有必要,可以将其清除。git commit -m "Project is archived" --allow-emptyarchived在分支上创建一个没有文件的提交。与git clone -n选项不同,此方法:
archived”因此“存档”的存储库已准备好由 重新激活git checkout master,并且随后可以重新存档git checkout archived