我要迁移到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.com
URL 的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的好主意相比,这样做的一个优点是你可以通过这种方式破例(例如,有一个我今天不想移动的回购,所以我可以把它改回来(。