在各种存储库中批量更改git远程源 - bash命令

时间:2016-07-11 18:27:04

标签: git bash find

我有一个目录,其中包含超过20个git存储库。我必须更改每个中的远程原始URL。我不想手动执行此操作并希望使用以下命令:

find . -maxdepth 1 -type d \( ! -name . \) -exec bash -c "cd '{}' && git remote set-url origin git@euxxx-x-x-xxx01.xx.xx.xxx.com:/foo/bar/'{}'.git" \;

问题是,括号{}被相对路径替换,所以我最终得到以下命令:

git remote set-url origin git@euxxx-x-x-xxx01.xx.xx.xxx.com:/foo/bar/./zaz/repo.git

但我只需要

git remote set-url origin git@euxxx-x-x-xxx01.xx.xx.xxx.com:/foo/bar/repo.git

如何实现这一目标?

6 个答案:

答案 0 :(得分:2)

远程URL值存储在配置文件中。 我们使用Notepad++在“查找文件”选项卡上查找和替换,以更改多个存储库中的所有域名。

“查找文件”屏幕将是这样;

Notepad++ Sample Screen

答案 1 :(得分:1)

尝试这样的事情:

var dungeonsSchema = new mongoose.Schema({
    name      : {type: String, required: true, unique: true},
    owner     : {type: String, required: true},
    blocks    : {type: [[Number]]},
});

其中压缩到以下单行:

find * -maxdepth 0 -type d \( ! -name . \) -print | while read dir
do
    cd $dir && git remote set-url origin git@euxxx-x-x-xxx01.xx.xx.xxx.com:/foo/bar/$dir.git && cd ..
done

修改:感谢Mark Reed指出了一种更好的方法来迭代dirnames。

答案 2 :(得分:1)

几次,当我需要此命令时,这是由于公司DNS的更改而导致回购名称的更改。以下脚本有助于自动化。我不喜欢在循环中使用目录名称,因为有时文件夹名称与实际的回购名称不同,这就是为什么git是最好的“事实来源”。

以下脚本将在该脚本所在目录的所有文件夹中递归地将名为“ origin”的远程站点中“ github.com”的所有实例替换为“ gitlab.com”。您可以使用“ SEARCH_ROOT”变量覆盖它

channel

答案 3 :(得分:0)

您可以使用find *代替find .。然后路径名将匹配。

答案 4 :(得分:0)

这应适用于任何可能具有git存储库的嵌套目录。它将找到任何.git目录,cd到该.git之上的一个目录,并检查给定的远程类型(默认为源),并用新的remote修改旧的remote。用法是:./thisscript'git@github.com:oldcompany''git@github.com:newcompany'起源 如果您的遥控器是origin,则无需传递第3个参数。希望这对人们有帮助。

#!/usr/bin/env bash

# Usage: ${0} [OLD_REMOTE] [NEW_REMOTE] [REMOTE_NAME]

OLD_REMOTE="${1:-bitbucket.org:mybbcompany}"
NEW_REMOTE="${2:-github.com:myghcompany}"
REMOTE_NAME="${3:-origin}"

find "${PWD}" -type d -name '.git' | while read dir; do
  cd "${dir}/.."
  current_remote_url=$(git remote get-url "${REMOTE_NAME}")
  if grep "${OLD_REMOTE}" <<< "${current_remote_url}"; then
    new_remote_url=$(sed "s/${OLD_REMOTE}/${NEW_REMOTE}/" <<< "${current_remote_url}")
    echo "Changing ${current_remote_url} to ${new_remote_url}"
    git remote set-url "${REMOTE_NAME}" "${new_remote_url}"
  fi
done

答案 5 :(得分:-1)

您可以使用此Shell脚本来更改远程URL Shell script to bulk change git remote url