我如何将一个“正常”的Git存储库转换为一个裸库?
主要的区别似乎是:
在普通的Git存储库中,您在存储库中有一个.git文件夹,其中包含所有相关数据和构成工作副本的所有其他文件 在裸Git存储库中,没有工作副本,文件夹(让我们称之为repo.git)包含实际的存储库数据
我如何将一个“正常”的Git存储库转换为一个裸库?
主要的区别似乎是:
在普通的Git存储库中,您在存储库中有一个.git文件夹,其中包含所有相关数据和构成工作副本的所有其他文件 在裸Git存储库中,没有工作副本,文件夹(让我们称之为repo.git)包含实际的存储库数据
当前回答
我只是想推到网络路径上的存储库,但git不会让我这样做,除非该存储库被标记为裸。 我只需要改变它的配置:
git config --bool core.bare true
除非你想保持文件整洁,否则没必要乱动。
其他回答
删除文件和移动.git目录的方法是不干净的,没有使用“git”方法来做一些应该简单的事情。这是我发现的将正常回购转换为裸回购的最干净的方法。
第一个克隆/path/to/normal/repo到一个名为repo.git的裸repo
git clone --bare /path/to/normal/repo
接下来删除指向/path/to/normal/repo的原点
cd repo.git
git remote rm origin
最后,您可以删除原来的回购。你可以重命名repo。在这一点上,Git的回购,但标准约定,以表示一个Git存储库是什么。git,所以我个人会这样做。
一旦你完成了所有这些,你可以克隆你的新裸回购(这实际上创建了一个正常的回购,也是你如何将它从裸转换为正常)
当然,如果你有其他的上行流,你会想要记录它们,并更新你的裸回购以包括它。但是同样,这一切都可以用git命令来完成。请记住手册页是您的朋友。
简单的读
Pro Git Book: 4.2 Git on the Server - get Git on a Server
归结起来是什么
$ git clone --bare my_project my_project.git
Cloning into bare repository 'my_project.git'...
done.
然后输入my_project。Git到服务器
主要是42号试图指出的答案。当然,人们可以重新发明轮子;-)
我只是想推到网络路径上的存储库,但git不会让我这样做,除非该存储库被标记为裸。 我只需要改变它的配置:
git config --bool core.bare true
除非你想保持文件整洁,否则没必要乱动。
你的方法看起来可行;裸存储库的文件结构就是.git目录中的内容。但我不知道是否有文件被修改过,如果失败了,你可以这样做
git clone --bare /path/to/repo
您可能需要在不同的目录中执行此操作以避免名称冲突,然后您可以将其移回您想要的位置。您可能需要更改配置文件,以指向您的原始回购所在的位置。
用于执行上述所有操作的onlineer:
for i in `ls -A .`; do if [ $i != ".git" ]; then rm -rf $i; fi; done; mv .git/* .; rm -rf .git; git config --bool core.bare true
(如果事情搞砸了,你又没有备份,可别怪我:P)