使用refspec差异进行Git pull/fetch

pie*_*zym 15 git git-pull git-fetch

使用refspec是一种方便的方法来获取远程分支并创建一个类似但具有给定名称的方法(或者反过来:创建一个具有与本地名称不同的给定名称的远程分支).我对一件小事感到困惑 - 因为拉也将与当前分支合并我期望不同的行为来自:

git fetch origin master:mymaster
Run Code Online (Sandbox Code Playgroud)

git pull origin master:mymaster
Run Code Online (Sandbox Code Playgroud)

上述两个命令似乎产生完全相同的结果 - 这是一个名为mymaster的本地分支,与origin/master相同.我是对的还是两者之间有一个模糊的区别?

最后,使用的Refspec将创建一个本地分支没有一个跟踪分支,对不对?因为在没有任何参数AFAIK的情况下调用git push时,会自动推送跟踪分支

Rya*_*art 29

refspec只是一个源/目标对.使用的Refspec x:yfetch告诉混帐,使这个名为回购"Y",即在远程回购名为"X"的分支的分支副本.没有其他的.

有了pull,git抛出合并在上面.首先,使用给定的refspec完成提取,然后将目标分支合并到当前分支中.如果这令人困惑,这是一步一步:

git pull origin master:mymaster
Run Code Online (Sandbox Code Playgroud)
  1. 转到原点并获得分支"主"
  2. 在本地制作一份名为"mymaster"的副本
  3. 将"mymaster"合并到当前分支中

完全合格,那将是refs/heads/mymasterrefs/heads/master.为了比较,git在克隆上设置的默认refspec是+refs/heads/*:refs/remotes/origin/*.refs/remotes为远程分支与本地分支保持分离,提供了方便的命名空间.你正在做的是告诉git将远程跟踪分支放在与本地分支相同的命名空间中.

对于"跟踪分支",这只是配置文件中的一个条目,告诉git默认情况下从哪里拉取本地分支.