如果我在没有跟踪任何远程分支的本地分支上,我给出命令
git fetch
鉴于我在 中定义了几个遥控器$GIT_DIR/config
,从哪个遥控器完成提取?
我试图从手册页中找出答案,但这一点我不清楚。
另外:如何在不进行本地分支跟踪的情况下更改此默认远程?
如果您有多个远程存储库,并且未指定任何远程存储库名称,origin
将默认使用。如果没有名为 origin 的远程存储库,那么它会出错说
fatal: No remote repository specified. Please, specify either a URL or a
remote name from which new revisions should be fetched.
另外:如何在不进行本地分支跟踪的情况下更改此默认远程?
您可以将该存储库名称重命名为“origin”以使其成为默认值。
小心:如果当前分支已经在不同的遥控器上指定了上游,这将不起作用。
来自git help fetch
:
如果未指定远程,默认情况下将使用原始远程,除非为当前分支配置了上游分支。
origin
在这种情况下,您可以通过编辑remote
配置的分支字段来更改要使用的上游分支.git/config
。
在您的项目文件夹中,当您在第一步初始化 git 时,会创建 .git 文件夹。
在此文件夹中查找名为 config 的文件,它包含所有分支信息。原点用作默认值。
[remote "origin"]
fetch = +refs/heads/*:refs/remotes/origin/*
url = git@github.com:project.git
所以代码是从这里列出的 url 中获取的。
它将获取原始远程。GIT clone
这是您执行命令的第一个遥控器
。
以下是一些别名,它们将提供可以以编程方式使用的字符串:
branch-name = "symbolic-ref --short HEAD" # https://stackoverflow.com/a/19585361/5353461
branch-remote-fetch = !"branch=$(git branch-name \"$1\") && git config branch.\"$branch\".remote || echo origin #"
branch-remote-push = !"branch=$(git branch-name \"$1\") && git config branch.\"$branch\".pushRemote || git config remote.pushDefault || git branch-remote-fetch #"
branch-url-fetch = !"remote=$(git branch-remote-fetch \"$1\") && git remote get-url \"$remote\" #" # cognizant of insteadOf
branch-url-push = !"remote=$(git branch-remote-push \"$1\") && git remote get-url --push \"$remote\" #" # cognizant of pushInsteadOf
如果您想找到另一个分支的远程,则将branch-name
上面的内容替换为允许传递单个参数:
branch-current = "symbolic-ref --short HEAD" # https://stackoverflow.com/a/19585361/5353461
branch-names = !"[ -z \"$1\" ] && git branch-current 2>/dev/null || git branch --format='%(refname:short)' --contains \"${1:-HEAD}\" #" # https://stackoverflow.com/a/19585361/5353461
branch-name = !"br=$(git branch-names \"$1\") && case \"$br\" in *$'\\n'*) printf \"Multiple branches:\\n%s\" \"$br\">&2; exit 1;; esac; echo \"$br\" #"