我如何将一个“正常”的Git存储库转换为一个裸库?
主要的区别似乎是:
在普通的Git存储库中,您在存储库中有一个.git文件夹,其中包含所有相关数据和构成工作副本的所有其他文件 在裸Git存储库中,没有工作副本,文件夹(让我们称之为repo.git)包含实际的存储库数据
我如何将一个“正常”的Git存储库转换为一个裸库?
主要的区别似乎是:
在普通的Git存储库中,您在存储库中有一个.git文件夹,其中包含所有相关数据和构成工作副本的所有其他文件 在裸Git存储库中,没有工作副本,文件夹(让我们称之为repo.git)包含实际的存储库数据
当前回答
我使用下面的脚本读取一个文本文件,其中包含我所有的SVN repo,并将它们转换为GIT,然后使用GIT clone——bare转换为一个裸露的GIT repo
#!/bin/bash
file="list.txt"
while IFS= read -r repo_name
do
printf '%s\n' "$repo_name"
sudo git svn clone --shared --preserve-empty-dirs --authors-file=users.txt file:///programs/svn/$repo_name
sudo git clone --bare /programs/git/$repo_name $repo_name.git
sudo chown -R www-data:www-data $repo_name.git
sudo rm -rf $repo_name
done <"$file"
List.txt有这样的格式
repo1_name
repo2_name
users.txt有这个格式
(无作者)=罗杰斯王子<prince.rogers.nelson@payesley.park.org>
www-data是Apache web服务器用户,需要权限才能通过HTTP推送更改
其他回答
首先,备份你现有的回购:
(a) mkdir backup
(b) cd backup
(c) git clone non_bare_repo
其次,运行以下命令:
git clone --bare -l non_bare_repo new_bare_repo
也请大家考虑使用
git clone --mirror path_to_source_repository path_to_bare_repository
从文档中可以看到:
设置源存储库的镜像。这意味着——裸露。与——bare相比,——mirror不仅将源的本地分支映射到目标的本地分支,它还映射所有的引用(包括远程跟踪分支,notes等),并设置一个refspec配置,以便所有这些引用都被目标库中的git远程更新覆盖。
我使用下面的脚本读取一个文本文件,其中包含我所有的SVN repo,并将它们转换为GIT,然后使用GIT clone——bare转换为一个裸露的GIT repo
#!/bin/bash
file="list.txt"
while IFS= read -r repo_name
do
printf '%s\n' "$repo_name"
sudo git svn clone --shared --preserve-empty-dirs --authors-file=users.txt file:///programs/svn/$repo_name
sudo git clone --bare /programs/git/$repo_name $repo_name.git
sudo chown -R www-data:www-data $repo_name.git
sudo rm -rf $repo_name
done <"$file"
List.txt有这样的格式
repo1_name
repo2_name
users.txt有这个格式
(无作者)=罗杰斯王子<prince.rogers.nelson@payesley.park.org>
www-data是Apache web服务器用户,需要权限才能通过HTTP推送更改
我已经看了答案,我是这么做的:
cd repos
mv .git repos.git
cd repos.git
git config --bool core.bare true # from another answer
cd ../
mv repos.git ../
cd ../
rm -rf repos/ # or delete using a file manager if you like
这将留下repos/。Git作为裸rest . Git
删除文件和移动.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命令来完成。请记住手册页是您的朋友。