在此之前,我认为git fetch
和git push
对$GIT_DIR/config
的影响是相同的,因为两者都是repository engagements
的命令,但是当我们将存储库添加为{ {1}}对于当前存储库,Git在remote repository
中为refspec
创建了一个默认的git fetch
集,例如:
config
为什么不对配置文件中git push的默认refspec集做同样的事情?
我猜差异是由fetch = +refs/heads/*:refs/remotes/remote_repository/*
命令的目的引起的:
default
的默认用途是fetch
downloading all objects and refs from another repository
的默认用途是push
但我不确定我的猜测。这是真的吗?
答案 0 :(得分:1)
简单地说,分支可以从一个远程跟踪分支拉出并推送到另一个分支。
即使您设置了默认推送政策(git config push.default
),that would be overridden by a local branch.<name>.push
config。
Since git 2.5,您可以轻松区分用于获取和推送的refspec(如果没有针对分支的push refspec,则默认为fetch)
例如,如果您在主分支机构上,并希望查看您是否比您要推送的远程跟踪分支(默认情况下为origin/master
)更先进或落后,但它可能是任何其他远程分支一个如果在配置中设置了branch.master.push
git for-each-ref --format="%(push:track)" refs/heads
快捷方式<branch>@{push}
直接指向配置branch.master.push
中设置的值。
例如,要查看尚未推送的提交:
git log @{push}..
请注意,在 Git 2.22(2019年第2季度)之前的,%(push:track)
选项中使用的--format
令牌“git for-each-ref
”和朋友没有显示右分支。
这已得到修复。
commit c646d09见Damien Robert (DamienRobert
)(2019年4月16日)
(由Junio C Hamano -- gitster
--合并于commit f560a4d,2019年5月8日)
使用正确的分支
ref-filter
:对%(push:track)
在
ref-filter.c
中,处理原子%(push:track)
时, 使用引用的stat_tracking_info
计算前/后值 到上游分支。通过在
for_push
中引入新标记stat_tracking_info
来解决此问题 在remote.c
中,它对推送分支执行相同的操作 更新stat_tracking_info
的几个调用者来处理此标志。这个 确保我们将来每当使用此功能时都要小心 指定这应该适用于上游或推送分支。
答案 1 :(得分:0)
git push
的工作方式略有不同。
您可以设置 push.default 参数来控制它。
这是git v2.0发行说明,它解释了git处理推送方式的变化(简单与匹配)。这已在git v2.0中更新,以修复默认的git push
行为。
在git v2.0执行git push
之前,它会推送所有已更改的分支(所有,而不仅仅是当前分支)。
Git v2.0发行说明
向后兼容性说明
当
git push [$there]
没有说要推送什么时,我们已经使用了 到目前为止传统的matching
语义(所有分支都已发送 只要已经存在同名分支,就可以到远程控制台 在那边)。在Git 2.0中,默认值现在是simple
语义, 推动:
只有当前分支到同名的分支,并且只有 当前分支设置为与该远程集成时 分支,如果你正在推送到同一个遥控器;或
只有当前分支到具有相同名称的分支,如果您 正在推送到一个不是你常去的地方的遥控器。
您可以使用配置变量
push.default
进行更改 这个。如果你是一个想要继续使用的老人matching
语义,您可以将变量设置为matching
例。阅读文档以了解其他可能性。