重置索引(否则,它认为所有内容都已删除,因为.gitbare repo不包括文件' index '。
git reset HEAD -- . 这将恢复.git/index。 我已经有效地将一个裸的repo转换为一个非裸的repo,同时保留了我以前得到的内容。 我多年来一直使用的完整脚本包括以下步骤:
cd /path/to/current/worktree
# That creates a .git directly at the right place
git clone --bare /url/of/repo .git
# restore the link between the local repo and its upstream remote repo
git config --local --bool core.bare false
git config --local remote.origin.fetch +refs/heads/*:refs/remotes/origin/*
git fetch origin
git branch -u origin/master master
# reset the index (not the working tree)
git reset HEAD -- .
9条答案
按热度按时间v8wbuo2f1#
注意:我在一个 very simple 1-commit repository上测试过。请仔细检查这一点,阅读man pages,并在遵循StackOverflow上的建议之前为您的备份感到高兴。(你会回来的,对吧?))
要将
--bare
存储库转换为非裸存储库,请执行以下操作:1.在存储库的顶层创建一个
.git
文件夹。1.将存储库管理内容(
HEAD branches config description hooks info objects refs
等)移动到您刚刚创建的.git
中。1.运行
git config --local --bool core.bare false
将本地git-repository转换为non-bare。1.* (通过Tamás Pap的评论)* 在步骤#3之后,您将看到您在分支
master
(或您的主分支)上,并且所有文件都被删除,并且删除正在进行。这很正常只需手动 checkoutmaster
,或执行git reset --hard
,就完成了。1.* (解决Royi报告的问题)* 编辑
.git/config
文件,在[remote "origin"]
部分的url = <...>
之后添加行fetch = +refs/heads/*:refs/remotes/origin/*
。否则git fetch
将看不到origin/master
和其他origin的分支。这些步骤与this question的方向相反,“git-convert normal to bare repository”-特别注意this answer,它指出上述步骤(我假设,无论哪个方向)都与
git-clone
不同。不知道这是否与你有关,但是你在问题中提到了git clone
。r8uurelv2#
我有一个稍微不同的场景:
解决方案:
.git
目录中克隆该内容中的裸存储库:git clone --bare https://github.com/user/project .git
git config --local --bool core.bare false
.git
bare repo不包括文件'index
'。git reset HEAD -- .
这将恢复
.git/index
。我已经有效地将一个裸的repo转换为一个非裸的repo,同时保留了我以前得到的内容。
我多年来一直使用的完整脚本包括以下步骤:
但我确实认为accepted solution(helpful
git reset
step added和ADTC)更简单。4jb9z9bj3#
最初的问题是没有足够的空间来做简单的事情。对于那些有足够空间的人来说,答案要简单得多:
dfty9e194#
要简化和合并答案中的信息,请执行以下操作:
裸仓库与普通的.git文件夹有三个不同之处:
因此,您可以简单地将您的裸存储库移动到新文件夹的.git子文件夹中,
更换核心。裸露:
添加默认原点refspec,使
git fetch
和git push
选择与通常相同的默认值:并生成索引文件和工作树:
我建议使用
git checkout
而不是git reset
来生成文件,以防不小心输入到错误的位置。pcrecxhr5#
如果磁盘空间不足,通过转换到普通存储库来扩展工作树将是一个问题,但是您可以浏览裸存储库的内容而无需转换它。在任何提交上使用
git cat-file -p <commit-sha>
来查看它所引用的树。使用git cat-file -p <blob-sha>
查看blob引用的文件的内容。使用git show <sha>:path
,其中sha是一个提交或一个树,以查看path处blob的内容。nwlqm0z16#
cd
到裸存储库中并执行1.或者:
1.或者
(will给予你一个名为X的常规git仓库)
fzwojiic7#
如果你不介意在不同的工作树上工作,那么
请注意,这不是克隆。
ctehm74n8#
即推即用
您可以使用hooks目录中的post-receive脚本将存储库展开到部署目录中,而不是将裸远程存储库转换为标准存储库。
Here is a good example of setting up Push-to-Deploy
为了便于参考,这是上面链接中的脚本内容示例。它只会将来自“master”分支的推送部署到名为“deploy”的目录中,该目录与仓库的父目录处于同一级别:
cbeh67ev9#
Windows 10的另一个案例
在我的情况下,我甚至不会在另一个路径中初始化任何新的具有工作树的存储库,以便稍后克隆
(BARE:main)
远程存储库,因为它不是存储库,并且我找不到***.git***文件夹,因为我在运行后无法创建它。所以我的问题是在***系统环境变量***中,有一个不同的路径关联到我的git。我只需要删除这个变量,然后就可以运行
git init
了我会附上图片,你可以访问 * 系统环境变量 *
1.去启动windows< windows-key >
1.写入系统
1.按*系统**控制面板 *
1.在 * 关于 * 中,在 * 相关设置 * 下查找 * 高级系统设置 *
1.然后单击***环境变量...***
1.删除与git相关的内容。