使用远程存储库(fetch / push)需要REMOTE TRACKING分支存在吗?

时间:2015-05-16 11:20:26

标签: git

我是Git的新手。

我知道Git远程回购用于共享代码。

此外,还有几种分支类型:

1. local. 

    1.1 non-tracking.

    1.2 tracking.

2. remote. 

为了共享代码,我需要将代码从本地存储库“推送”到远程存储库。

假设我:

  • 在Github上创建了一个远程仓库。这个远程仓库目前是空的。
  • 本地机器 - >在我的本地机器中创建了一个名为“origin”的别名,因此我可以与该远程仓库进行交互。
  • 本地机器 - >使用以下命令创建了一个名为“master”的NON-TRACKING分支:

    git branch branch-name

  • 本地机器 - >我已经在非跟踪分支中做了一些提交。

  • 推送代码会将远程跟踪分支(本地计算机)和远程分支更新为跟踪分支(本地计算机)。

  • 获取代码会将远程跟踪分支(本地计算机)更新为与远程分支相同。然后,需要额外的合并才能使“跟踪分支”(本地机器)与“远程跟踪分支”(本地机器)相同。

假设我想直接从远程分支推送/获取,而没有REMOTE TRACKING分支(本地机器),即没有它作为中间人...

这可能吗?

提前致谢。

1 个答案:

答案 0 :(得分:1)

  

假设我想直接从远程分支推送/获取,而没有REMOTE TRACKING分支(本地机器),即没有它作为中间人...

你正在看着它,好像分支是一些重量级的东西。他们不是,甚至不是,远程。你推送和获取提交以及与它们一起使用的任何对象。然后你会把有趣的小标签挂在上面。在提取或推送过程中附加标签的成本并不是微不足道的,甚至几乎都不可辨别。

那就是说,是的,你可以做一些非常灵活的refname重写。要使用它,您可以将自己的repo用作遥控器,其名称为.

git ls-remote .

git fetch . +refs/heads/*:refs/duplicated-by-fetch/*

git fetch . +refs/*:refs/fetched/*

git push . +refs/fetched/*:refs/pushed/*/original

所以要直接复制所有远程的参考:

git fetch u://r/epo +refs/*:refs/*

如果其中一个复制的参考文件已经存在并且您已将其签出,那么git可能会抱怨;重写,实际上是一个隐含的git reset --soft,而不是你想要在不知不觉中调用的东西。

远程的默认提取refspec可配置为remote.$remotename.fetch,默认为

+refs/heads/*:refs/remotes/origin/*