我是git的新手,我熟悉常规的git clone,开发,提交,推送工作流程。在我观看的其中一个教程中,我注意到开发人员正在执行以下操作:
git init
git fetch ssh://someserver.git refs/data/val
git checkout FETCH_HEAD
.
. make changes to files
.
git commit -am "somemessage"
git push ssh://someserver.git HEAD:refs/data/val
有人可以帮忙解释一下:
refs/data/val
命令中git fetch
的含义是什么?注意:这不是要理解FETCH_HEAD是什么。所以这不是重复。
答案 0 :(得分:1)
这可能会为整个工作流程提供一些见解:
What is the difference between pull and clone in git?
关于第二个问题,他正在他的* .git链接从回购中获取分支 refs/data/val
。
答案 1 :(得分:1)
这是一个奇怪的工作流程,一般来说并不是很有用。它的主要特征是使用一个特殊的引用命名空间,将refs/data/val
视为分支名称。
效果就像克隆--single-branch
,除了他用 no 分支克隆,然后将有趣的ref视为分支。
git checkout
步骤会产生一个分离的HEAD。
后续提交进行了一次新的提交,扩展了分离的HEAD。
最终git push
更新了另一个Git,继续将特殊命名的引用视为分支。另一个Git可以自由拒绝推送。很多/大多数人只是因为refs/data/
不是一个已知的安全命名空间来推送。
由于没有命名远程,因此为了方便合并和/或重新定位,无法在本地存储远程的分支名称。由于没有命名分支,因此Git的内置分支行为不能用于提交,合并和/或重新定位。由于既没有命名分支,也没有命名远程,因此无法使用Git的内置push
行为,需要完全拼写的URL和HEAD
- to-ref push。
简而言之,这是一种不经常使用Git的不方便方式。