有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-empty
archived
在分支上创建一个没有文件的提交。与git clone -n
选项不同,此方法:
archived
”因此“存档”的存储库已准备好由 重新激活git checkout master
,并且随后可以重新存档git checkout archived