2

免责声明

我对 GIT 有点陌生,所以如果我完全错了,请原谅。我已经使用 Subversion 很长时间了,看到了 GIT 的巨大好处,并且正在积极尝试进行转换。但是,我提出了这个问题,我似乎无法找到一个好的教程或操作方法。这就是上游标签的正确使用。

我做了什么

我的示例是 github.com 托管存储库 redmine。它包含许多用于稳定版本和分支的标签以及当前正在运行的 master。

我已经通过发布在我自己的系统上分叉了它

cd /srv/git-repos
git clone --mirror https://github.com/redmine/redmine.git redmine.git

然后我通过执行以下操作克隆了我的本地分叉

cd /opt
git clone /srv/git-repos/redmine.git

然后我按照 github.com 的说明添加远程上游

cd /opt/redmine
git remote add upstream https://github.com/redmine/redmine.git

很酷,此时我在我的系统上有一个 redmine 的分叉副本,我可以提交并从中推送和拉取。我还添加了真正的 redmine 作为上游,我也可以从中提取。

所以我想做的第一件事就是在我当前安装正在运行的状态下获取这个新的 repo。

似乎很容易:

# Checkout the older tag I'm on
git checkout v1.1.0

# Add a plugin as a submodule
git submodule add git://github.com/delaitre/redmine_time_tracker.git vendor/plugins/redmine_time_tracker
git submodule update --init --recursive

现在我想把它提交到我的叉子上(我很确定我已经出错了)

git commit -m 'Added a new submodule'

我在哪里

惊人的!我现在回到了我从不使用 git 开始的地方,但一切都是版本化且安全的,并且希望更易于管理。

问题

重点是在升级到上游标签的新版本(v1.4.0)之前我想保证安全。

那么,如何在保留对本地分支的提交的同时切换到上游的新标签?

我在上面说过(我想我已经出错了)。从一些额外的阅读中,我认为我应该以某种方式分支远程标签,并根据远程标签提交一个新分支。这是因为我确定我现在处于“分离的 HEAD 状态”,这显然很糟糕。

寻找

  1. 如何从标签分支。
  2. 命名此“分支标签”的最佳做法是什么(例如 _v1.2.0、my_v1.2.0、local_v1.2.0)
    • 我是不是过于肛门,谁在乎它的名字?
  3. 下一步:如何合并新的远程标签(即 v1.4.0)
  4. 我如何提交这个新的合并标签等。

结论

我是否完全偏离了基础,坚果,完全错了,或者没有抓住重点?这是不常见的情况吗?我是否错过了有关如何执行此操作的文档?

4

1 回答 1

1

如何从标签分支。

git checkout -b newBranch yourTag

注意:

  • git clone --mirror https://github.com/redmine/redmine就足够了(无需提及.git,这将创建一个“redmine”目录,而不是 readmine.git 目录,这是为裸仓库保留的命名约定)
  • git checkout aTag将使您处于分离的 HEAD 模式,这意味着此时您需要创建一个新分支:
git checkout aNewBranch

这将从您当前的提交(现在未附加到任何分支)创建它。
并注意子模块:它们本身在分离的 HEAD 模式下检出:请参阅“如何使用分离的 HEAD 使子模块附加到实际的 HEAD? ”和“如何git clone --recursive重新创建子模块的远程和分支?

于 2012-08-10T07:25:57.027 回答