git tracking不适用于不同的本地和远程名称?

bru*_*uce 5 git

如果我做

git checkout -b samename origin/samename
Run Code Online (Sandbox Code Playgroud)

然后跟踪似乎工作正常.如果我做后续提交,我就可以做

git push
Run Code Online (Sandbox Code Playgroud)

并且git将我的提交推迟到原点.

但是,如果我这样做

git checkout -b diffname origin/samename
Run Code Online (Sandbox Code Playgroud)

然后跟踪不起作用,尽管pro git书的这一部分:

$ git checkout -b sf origin/serverfix
Branch sf set up to track remote branch refs/remotes/origin/serverfix.
Switched to a new branch "sf"
Now, your local branch sf will automatically push to and pull from origin/serverfix
Run Code Online (Sandbox Code Playgroud)

Git push只是给出了"一切都是最新的"给出了什么?

我在mac os x上运行git 1.7.1

以下是那些想在家尝试的人的整个实验:

szbwood-mbp15:proj4_local bwood$ vi file1
szbwood-mbp15:proj4_local bwood$ git add file1
szbwood-mbp15:proj4_local bwood$ git commit -m"Created file 1"
[master (root-commit) 5d50289] Created file 1
 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 file1
szbwood-mbp15:proj4_local bwood$ git push origin master:samename
Counting objects: 3, done.
Writing objects: 100% (3/3), 225 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
To /Users/bwood/work/gitplay/proj4_remote.git
 * [new branch]      master -> samename
szbwood-mbp15:proj4_local bwood$ git checkout -b samename origin/samename
Branch samename set up to track remote branch samename from origin.
Switched to a new branch 'samename'
szbwood-mbp15:proj4_local bwood$ vi file1
szbwood-mbp15:proj4_local bwood$ git commit -a
[samename a7af908] ..
 1 files changed, 1 insertions(+), 0 deletions(-)
szbwood-mbp15:proj4_local bwood$ git push
Counting objects: 5, done.
Writing objects: 100% (3/3), 251 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
To /Users/bwood/work/gitplay/proj4_remote.git
   5d50289..a7af908  samename -> samename
szbwood-mbp15:proj4_local bwood$ git checkout -b diffname origin/samename
Branch diffname set up to track remote branch samename from origin.
Switched to a new branch 'diffname'
szbwood-mbp15:proj4_local bwood$ vi file1
szbwood-mbp15:proj4_local bwood$ git commit -a
[diffname c5bbec1] ..
 1 files changed, 1 insertions(+), 0 deletions(-)
szbwood-mbp15:proj4_local bwood$ git push
Everything up-to-date
Run Code Online (Sandbox Code Playgroud)

奇怪的是,配置文件看起来很好..

[branch "samename"]
        remote = origin
        merge = refs/heads/samename
[branch "diffname"]
        remote = origin
        merge = refs/heads/samename
Run Code Online (Sandbox Code Playgroud)

Cas*_*bel 4

这与跟踪无关。git push默认情况下根本不使用跟踪。它将具有匹配名称的分支推送到指定的远程。有一个配置参数可以控制此行为:

默认推送

定义如果命令行上没有给出 refspec、远程中没有配置 refspec、并且命令行上给出的任何选项都没有暗示 refspec,则 git Push 应采取的操作。可能的值为:

  • 什么都没有——不要推动任何东西。
  • 匹配 - 推送所有匹配的分支。所有两端具有相同名称的分支都被认为是匹配的。这是默认设置。
  • 跟踪 - 将当前分支推送到其上游分支。
  • current - 将当前分支推送到同名分支。

同样,默认值是匹配的,因此尽管您在第一种情况下确实设置了跟踪,但只是匹配的名称告诉它要推送什么。如果您愿意,您当然可以设置push.defaulttracking,并获得您期望的行为。

至于您引用 Pro Git 的话...哇,Pro Git 通常是一个很棒的资源。我还没有从头到尾读完它(我倾向于直接阅读手册页和源代码),但我读过的所有内容都很棒;即使是一个微小的错误,我也会感到惊讶!