5

git clone一个选项-n可以防止HEAD在克隆存储库后签出。是否有可能手动执行此操作?

编辑我认为该选项-n在手册中的阅读效果比实际更好:使用-n我所有的工具进行克隆后显示我仍然驻留在主分支上;唯一的区别是所有文件都显示为已删除。这与我称之为“未签出”的情况并不完全相同。

所以也许我应该删除HEAD

4

2 回答 2

7

最简单的解决方案是克隆它:

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.

于 2010-02-22T15:52:07.297 回答
0

我将原始问题阅读为想要保留回购,但删除工作树。当您想在完成一些工作后将项目放在次要位置时,这很有用。

一种解决方案是创建一个带有空工作树的分支,然后检查空分支:

git checkout --orphan archived
git reset --hard
git commit -m "Project is archived" --allow-empty

解释:

  1. git checkout --orphan archived创建分支archived,与项目无关的历史。
  2. git reset --hard删除工作树中存在的版本控制文件。git clean -fd它保留未版本控制的文件,如有必要,可以将其清除。
  3. git commit -m "Project is archived" --allow-emptyarchived在分支上创建一个没有文件的提交。

git clone -n选项不同,此方法:

  • 不会留下将所有文件显示为“已删除”的索引
  • 明确记录工作树发生的事情。当前分支名称将是“ archived

因此“存档”的存储库已准备好由 重新激活git checkout master,并且随后可以重新存档git checkout archived

于 2022-03-04T10:50:09.147 回答