维护一个git代码库的克隆版本

4
我希望能在自托管的Bitbucket服务器上克隆一个Github代码库,并不时地拉取Github代码库的最新更改。在我们的克隆版本中,我们将进行一些实验性工作,这些工作永远不会离开我们的代码库。
举个例子,如果使用Fossil,我会确保我们的代码库和他们的代码库具有相同的项目ID,并执行以下操作:
$ cd ~/checkout/prjdir
$ fossil pull https://their.org/prj/foo --once

这将获取所有最新的签入、分支、标签等,并将其推送到我们组织的服务器:

$ fossil push

我们不会有任何冲突;我们的更改将在实验分支上进行,因此在从上游更新时无需进行合并。

我尝试复制化石工作流程,并复制/粘贴了一些相关的内容,为初始克隆创建了以下内容:

$ git clone https://github.com/foo/bar.git
$ cd bar
$ git remote set-url origin https://ourbitbucket.org/foo/bar.git
$ git push -u origin master

然而,这似乎没有带来标签(标签对我们很重要)。

使用git(github作为上游和我们的bitbucket服务器用于我们自己的标签/分支):

  1. 我如何克隆完整的存储库(包括所有分支和标签)?
  2. 一旦我有了克隆的存储库,我如何从上游(在github上,包括分支和标签)拉取所有最新更改,并将它们推送到我们的服务器(bitbucket)?

你怎么知道标签没有被克隆?或者你想要使用 push --tags 命令吗? - choroba
这只需要执行 git fetch --tags 命令就可以解决了吗? - moopet
@choroba 看起来缺少“--tags”。谢谢。 - cypheratheist
1个回答

5

不要更改存储库的URL。只需创建两个远程,upstreamorigin

标签默认情况下不会被推送。使用--tags来推送它们。

$ git clone https://github.com/foo/bar.git
$ cd bar
$ git remote rename origin upstream
$ git remote add origin https://ourbitbucket.org/foo/bar.git
$ git push -u --tags origin master

每当您想要与上游同步时,请执行以下操作:
$ git checkout master
$ git pull upstream master

甚至可以。
$ git reset --hard upstream/master

并将你的分支重新合并(或合并主分支到你的分支),将他们的更改合并到你的工作中:

$ git checkout my-branch
$ git rebase master

或者

$ git checkout my-branch
$ git merge master

那么,在初始克隆之后,我会使用“git pull upstream”,然后是“git push -u --tags origin master”?您能否通过一个初始克隆后的工作流示例来扩展答案? - cypheratheist
@cypheratheist:clone 命令已经拉取了代码,所以不需要在克隆之后再拉取上游分支。 - choroba

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接