Having a hard time understanding git-fetch

后端 未结 4 698
没有蜡笔的小新
没有蜡笔的小新 2020-11-22 15:43

I am having a hard time understanding the nuances of git-fetch. I understand that doing a fetch, fetches the remote refs into a local tracking branch.

I

4条回答
  •  一个人的身影
    2020-11-22 15:52

    Note that the main maintainer for Git has now (Git 2.1, August 2014) added this explanation for git fetch:
    (See commit fcb14b0 by Junio C Hamano (gitster):

    CONFIGURED REMOTE-TRACKING BRANCHES

    You often interact with the same remote repository by regularly and repeatedly fetching from it. In order to keep track of the progress of such a remote repository, git fetch allows you to configure remote..fetch configuration variables.

    Typically such a variable may look like this:

    [remote "origin"]
    fetch = +refs/heads/*:refs/remotes/origin/*
    

    This configuration is used in two ways:

    • When git fetch is run without specifying what branches and/or tags to fetch on the command line, e.g. git fetch origin or git fetch, remote..fetch values are used as the refspecs---they specify which refs to fetch and which local refs to update.
      The example above will fetch all branches that exist in the origin (i.e. any ref that matches the left-hand side of the value, refs/heads/*) and update the corresponding remote-tracking branches in the refs/remotes/origin/* hierarchy.

    • When git fetch is run with explicit branches and/or tags to fetch on the command line, e.g. git fetch origin master, the s given on the command line determine what are to be fetched (e.g. master in the example, which is a short-hand for master:, which in turn means "fetch the 'master' branch but I do not explicitly say what remote-tracking branch to update with it from the command line"), and the example command will fetch only the 'master' branch.
      The remote..fetch values determine which remote-tracking branch, if any, is updated.
      When used in this way, the remote..fetch values do not have any effect in deciding what gets fetched (i.e. the values are not used as refspecs when the command-line lists refspecs); they are only used to decide where the refs that are fetched are stored by acting as a mapping.

提交回复
热议问题