Default remote for git fetch

ε祈祈猫儿з 提交于 2019-12-14 00:15:51

问题


If I am on a local branch that is not tracking any remote branch and I give the command

git fetch

Given I have several remotes defined in $GIT_DIR/config, from which remote is the fetch done?

I tried to find out from the man page, but this point is unclear to me.

Additionally: How can I change this default remote without making the local branch tracking?


回答1:


If you have multiple remote repositories, and don't specify any remote repository name, origin will be used by default. If there is no remote repository named origin, then it will error out saying

fatal: No remote repository specified.  Please, specify either a URL or a
remote name from which new revisions should be fetched.

Additionally: How can I change this default remote without making the local branch tracking?

You can rename that repository name to 'origin' to make it default.

Careful: this won't work if the current branch already has an upstream specified on a different remote.
From git help fetch:

When no remote is specified, by default the origin remote will be used, unless there’s an upstream branch configured for the current branch.

In this case, you can change the upstream branches to use origin by editing the remote fields for branches configured in .git/config.




回答2:


In your project folder, when you initialize git in the first step, .git folder is created.

Look into this folder for a file named config, it contains all the branch info. origin is used as the default.

  [remote "origin"]
      fetch = +refs/heads/*:refs/remotes/origin/*
      url = git@github.com:project.git

So the code is fetched from the url listed here.




回答3:


It will fetch of the origin remote. This is the frist remote you performed the GIT clone command on.




回答4:


Here are some aliases which will give strings which can be used programatically:

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

If you want to find the remote for another branch, then replace branch-name above with the following with allow for a single argument to be passed:

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\" #"


来源:https://stackoverflow.com/questions/16838158/default-remote-for-git-fetch

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!