分叉并克隆GitHub上的存储库后,通常会为fork配置上游远程:
$ git remote add upstream https://github.com/ORIGINAL_OWNER/ORIGINAL_REPO.git
是否可以在不使用集线器的情况下自动(以编程方式)查找上游URL,以便为上述命令创建别名(或脚本)?
根据@Vampire的答案,您可以将以下bash函数添加到~/.bashrc
:
function add_upstream() {
url=$(git config --get remote.origin.url)
repo=${url##*/}
user=$(echo "$url" | awk -F/ '{print $4}')
remote=$(curl -s "https://api.github.com/repos/$user/$repo" | jq -r '.parent.clone_url')
if [ "$remote" != "null" ]; then
git remote add upstream "$remote"
else
echo "no upstream found"
fi
}
它提取用户和存储库值,并使用jq
JSON解析器进行解析.parent.clone_url
。
如果没有jq
,可以使用:
function add_upstream() {
url=$(git config --get remote.origin.url)
repo=${url##*/}
user=$(echo "$url" | awk -F/ '{print $4}')
remote=$(curl -s "https://api.github.com/repos/$user/$repo" | awk 'match($0, /\"clone_url\"\s*:\s*\"(.*)\"/, a) {last=a[1]}END{print last}')
if [ ! -z "$remote" ]; then
git remote add upstream "$remote"
else
echo "no upstream found"
fi
}
然后,将其与add_upstream
命令一起使用