从 GitHub 迁移到 GitLab(作为 POSIX 环境中的远程设备)



我要迁移到GitLab。我需要编辑工作站上所有包含"github"的 .git/config 文件,并将该词替换为"gitlab"。我怀疑这可以通过单个find命令最容易地完成,而不是在每个文件夹中使用git调用。

我认为它会是这样的:

find ./ -name ".git/config" -type f -exec sed -i 's/github/gitlab/gI' {} ;

这是一种安全/合理的方法吗?最好的方法是什么?

编辑/更新: 评论:我实际上不想对所有 github 存储库都这样做,因为只有我控制的那些在移动。我还没有修改我的问题,但接受的答案包括一个仅针对一个 github 帐户的版本。我自己在下面的答案最能实现更改每个文件的目标。

您不必这样做,您可以将单个规则与insteadOf指令一起使用。

git config --global url."https://gitlab.com/".insteadOf "https://github.com/"
git config --global url."git@gitlab.com:".insteadOf "git@github.com:"

然后,任何使用github.comURL 的git push/pull/clone都将改用gitlab.com

OP CPBL在评论中提到:

为了不更改我使用的其他 GitHub 包,以下内容对我有用:

git config --global url."git@gitlab.com:cpbl".insteadOf "git@github.com:cpbl"
git config --global url."git@gitlab.com/cpbl".insteadOf "git@github.com/cpbl"

要在 github 上仅更改对一个帐户(更安全(中存储库的引用,请使用以下内容(假设我在 GitHub 和 gitlab 上的用户名是cpbl(:

find ./ -wholename "*/.git/config" -type f -exec sed -i 's/github.com:cpbl/gitlab.com:cpbl/gI' {} ;
find ./ -wholename "*/.git/config" -type f -exec sed -i 's/github.com/cpbl/gitlab.com/cpbl/gI' {} ;

显然,您应该将"cpbl"替换为所需的github/gitlab用户名。 需要这两条线,因为可能同时存在url = git@gitlab.com:cpbl/和 在 .git 文件中url = git@gitlab.com/cpbl/引用。

在继续上述操作之前,要列出您将要更改的内容,您可以执行以下操作:

find ./ -wholename "*/.git/config" -type f -exec grep github.com:cpbl {} ;
find ./ -wholename "*/.git/config" -type f -exec grep github.com/cpbl {} ;

与@VonC的好主意相比,这样做的一个优点是你可以通过这种方式破例(例如,有一个我今天不想移动的回购,所以我可以把它改回来(。

最新更新