gpt4 book ai didi

linux - 将系统上所有 git 存储库的远程从 http 更改为 ssh

转载 作者:行者123 更新时间:2023-12-04 14:58:37 26 4
gpt4 key购买 nike

最近 Github 提出了一个弃用通知,即推送到我们存储库的 HTTP 方法即将过期。我决定改用 SSH 方法。在这样做时,我发现我们需要在设置 key 后更改存储库的远程 URL。
但是更改是一个乏味的过程,并且为我在本地系统上拥有的所有存储库进行更改是一项相当漫长的工作。有什么办法可以编写一个 Bash 脚本,它会一个一个遍历目录,然后将远程 URL 从 HTTP 版本更改为 SSH 版本?
这使得从 HTTP -> SSH 进行必要的更改。

git remote set-url origin git@github.com:username/repo-name
我们需要改变的是 repo-name它可以与目录名称相同。
我想到的是在包含所有 git repos 的父目录上运行一个嵌套的 for 循环。这将是这样的:
for DIR in *; do
for SUBDIR in DIR; do
("git remote set-url..."; cd ..;)
done
done

最佳答案

这将识别包含名为 .git 的文件或文件夹的所有子文件夹。 ,将其视为一个 repo,然后运行您的命令。
我强烈建议您在运行之前进行备份。

#!/bin/bash

USERNAME="yourusername"

for DIR in $(find . -type d); do

if [ -d "$DIR/.git" ] || [ -f "$DIR/.git" ]; then

# Using ( and ) to create a subshell, so the working dir doesn't
# change in the main script

# subshell start
(
cd "$DIR"
REMOTE=$(git config --get remote.origin.url)
REPO=$(basename `git rev-parse --show-toplevel`)

if [[ "$REMOTE" == "https://github.com/"* ]]; then

echo "HTTPS repo found ($REPO) $DIR"
git remote set-url origin git@github.com:$USERNAME/$REPO

# Check if the conversion worked
REMOTE=$(git config --get remote.origin.url)
if [[ "$REMOTE" == "git@github.com:"* ]]; then
echo "Repo \"$REPO\" converted successfully!"
else
echo "Failed to convert repo $REPO from HTTPS to SSH"
fi

elif [[ "$REMOTE" == "git@github.com:"* ]]; then
echo "SSH repo - skip ($REPO) $DIR"
else
echo "Not Github - skip ($REPO) $DIR"
fi
)
# subshell end

fi

done

关于linux - 将系统上所有 git 存储库的远程从 http 更改为 ssh,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67401212/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com