如何在没有集线器的情况下自动在GitHub上找到派生的上游URL?

s3r*_*vac 2 git github

分叉并克隆GitHub上的存储库后,通常会为fork配置上游远程

$ git remote add upstream https://github.com/ORIGINAL_OWNER/ORIGINAL_REPO.git
Run Code Online (Sandbox Code Playgroud)

是否可以在不使用集线器的情况下自动(以编程方式)查找上游URL,以便为上述命令创建别名(或脚本)?

Ber*_*tel 5

根据@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
}
Run Code Online (Sandbox Code Playgroud)

它提取用户和存储库值,并使用jqJSON解析器进行解析.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
}
Run Code Online (Sandbox Code Playgroud)

然后,将其与add_upstream命令一起使用