Git在离线时设置跟踪分支

时间:2015-06-02 17:29:48

标签: git

git push -u origin branch

分支 origin / branch 绑定在一起,以便后续从分支推送可以只是git push,据我所知

我可以在离线时为全新的回购设置(原产地/分支尚未存在)设置此类跟踪吗?我想这样做所以后来从 branch 推送到 origin / branch ,而不必在我上线时指定。

2 个答案:

答案 0 :(得分:3)

好吧,让我们自己解决一些git

git存储对远程分支的引用的位置在.git/refs/remotes/<remote_repo>中。假设我们刚刚创建了一个新的repo,并添加了remote作为原点。然后我们离线并创建一个名为new_branch的新分支。

如果您查看.git/refs/remotes/origin,您应该看到:

decave@demo~$ls /home/decave/demo/.git/refs/remotes/origin
HEAD

那里没有分店;鉴于我们没有从远程仓库推或拉任何分支,这是预期的。现在,假设new_branch指向带有哈希e81d5ea59b5f7ab81de4662f7dca5de86e230d92的提交。如果我们将文件添加到名为.git/refs/remotes/origin的{​​{1}}并将其内容设置为new_branch,那么它就等于告诉您的本地回购“嘿,e81d5ea59b5f7ab81de4662f7dca5de86e230d92是一个分支指向提交new_branch“的原点。这可以使用e81d5ea59b5f7ab81de4662f7dca5de86e230d92管道命令git

来完成
git update-ref

然后,如果你运行命令

git update-ref refs/remotes/origin/new_branch e81d5ea59b5f7ab81de4662f7dca5de86e230d92

它应该成功配置git branch --set-upstream-to origin/new_branch 以执行您想要的操作。

请注意,像这样开始围绕您自己的存储库进行管道是非常可怕的做法。实现这一目标的正确方法就是像你说的那样使用git标志。

答案 1 :(得分:2)

我将xyz用作分支的名称,并将origin作为遥控器的名称以避免混淆。您已经提到 online 方法同时推送和设置上游..

git push --set-upstream origin xyz

在线提取,设置上游离线

首选方法是在离线前使用--set-upstream-to git branch git branch --set-upstream-to origin/xyz 选项获取分支,而无需推送设置上游。

.git/config

这导致将以下行添加到[branch "xyz"] remote = origin merge = refs/heads/xyz ,这也是之前描述的在线方式的结果。

.git/config

完全脱机方法

如果您不想先获取远程分支,可以手动编辑git config或使用git config branch.xyz.remote origin git config branch.xyz.merge refs/heads/xyz 工具执行相同的操作。

--set-upstream-to

然后,当您获取远程分支时,您应该已经获得与已经获取远程分支的git update-ref refs/remotes/origin/xyz xyz git branch --set-upstream-to origin/xyz 相同的结果。

替代离线方法

您可以通过将远程分支ref设置为特定提交来模拟脱机提取,例如:与当地分支机构进行相同的提交。

$ sudo add-apt-repository ppa:webupd8team/java
$ sudo apt-get update
$ sudo apt-get install oracle-java8-installer
$ sudo apt-get install oracle-java8-set-default

直接参考更新的想法来自Decave的回答。谨慎使用并阅读有关快进/非快进提取的git-fetch(1)注释。