我如何将一个“正常”的Git存储库转换为一个裸库?
主要的区别似乎是:
在普通的Git存储库中,您在存储库中有一个.git文件夹,其中包含所有相关数据和构成工作副本的所有其他文件 在裸Git存储库中,没有工作副本,文件夹(让我们称之为repo.git)包含实际的存储库数据
我如何将一个“正常”的Git存储库转换为一个裸库?
主要的区别似乎是:
在普通的Git存储库中,您在存储库中有一个.git文件夹,其中包含所有相关数据和构成工作副本的所有其他文件 在裸Git存储库中,没有工作副本,文件夹(让我们称之为repo.git)包含实际的存储库数据
当前回答
除非您特别想要或需要在文件系统上摆弄比特,否则创建一个非裸库的裸版本真的非常简单(在这里的其他几篇文章中提到过)。它是git核心功能的一部分:
Git clone——bare existing_repo_path bare_repo_path
其他回答
我认为下面的链接会有帮助
GitFaq:如何使现有的非裸库变得裸?
$ mv repo/.git repo.git
$ git --git-dir=repo.git config core.bare true
$ rm -rf repo
简而言之:用repo/的内容替换repo的内容。Git,然后告诉存储库它现在是一个裸存储库。
为此,执行以下命令:
cd repo
mv .git ../repo.git # renaming just for clarity
cd ..
rm -fr repo
cd repo.git
git config --bool core.bare true
注意,这不同于做一个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 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)