如何重命名使用gitolite创建的Git仓库?

87

我使用 gitolite 创建了一个 Git 代码库,现在我想要重命名这个库。

我该如何操作呢?

在 gitolite 的 readme 文件中提到不应该直接在服务器上进行操作。但是在这种情况下,我猜需要在服务器上做一些工作,对吗?


好问题,感谢您对我的回答的评论。今天我需要这个答案 ;) - user34537
4个回答

138

gitolite基本管理员手册中所述:

重命名一个仓库

这类似于删除仓库; gitolite中没有用于此操作的代码。您需要执行以下步骤:

  • 登录到服务器,cd $REPO_BASE(默认:cd ~/repositories),然后

    mv old-name.git new-name.git

  • 返回到您的gitolite-admin克隆,编辑conf/gitolite.conf并将所有出现的old-name替换为new-name。然后像往常一样添加、提交并推送。

这两个步骤的顺序很重要;不要颠倒它们:-)

在gitolite3上需要第三个步骤:

  • 编辑存储库中的文件gl-conf并将存储库名称更改为新名称

当然,每个用户都应更新其克隆配置以指向新的仓库名称。


7
在 gitolite3 中,您还需要编辑 gl-conf 并更改存储库名称。 - Fernando Correia
4
不要忘记将本地代码库的远程地址设置为新名称:git remote set-url git@your.server:new-name.git,然后执行 git fetch 确保没有错误。 - cneuro
在得出这个答案之前,我把前两个步骤的顺序搞错了。顺便提一下,这也是可行的,只需要在mv命令之前运行rm -r new-name.git即可。 - Arnaud P

9
我不熟悉gitolite,但是可能适用的方法是创建一个全新的仓库并且使用正确的名称,将你的代码推送到新仓库,随后删除旧仓库。

据我所知,这应该会保留历史记录。+1 - user34537
1
删除旧仓库,创建新仓库并将旧仓库的内容推送到新仓库中即可。谢谢! - Patrick
以下是实现此操作的命令(假设NewRepo已经在Gitolite中创建):// 在旧仓库中 $ git remote add <remote-moniker> NewRepo $ git push --all --force NewRepo// 在新仓库中 $ git pull无需修改gitolite配置,所有历史记录都将被保留 :) - Matthew Skelton

0

以Greg Hewgill为例,您可以在配置文件中重命名存储库。建议您先在虚拟存储库上尝试此操作。我猜测旧名称将被删除,新名称将被创建,您需要在本地更新源,然后进行推送。


很不幸,在配置文件中重命名存储库并不能奏效。Gitlolite 会添加新的仓库,但并不会删除旧的。不过使用 Greg 的想法是可行的。 - Patrick
@Patrick:好知道,我还没有需要重命名或删除一个的情况。 - user34537

-1
一个干净的方法是创建一个新的空仓库,然后执行以下操作:
假设旧的是OLD,新的(空的)是NEW:
# mkdir /tmp/1
# cd /tmp/1
# git clone OLD_REPO old
# git clone NEW_REPO new
# cd new
# git pull ../old
# git push origin master

或者你可以直接使用 OLD 的远程仓库:

# mkdir /tmp/1
# cd /tmp/1
# git clone NEW_REPO new
# cd new
# git pull OLD_REPO
# git push origin master

这将保留所有历史记录,并让gitolite处理其内部。此外,您还需要更新gitolite-admin,但顺序没有限制。

这也可以在远程无问题地工作。

删除旧存储库应按照gitolite的说明(本地)进行。


我对gitolite.conf有写入权限,但是我没有其他托管在gitolite服务器上的git文件的写入权限,所以您的解决方案对我非常有效。值得注意的是,这种方法只会将主分支复制到新仓库。 - Lawrence

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接