我对GIT有点新意,所以如果我完全错了,请原谅我。我一直在使用Subversion很长一段时间,看到GIT的巨大好处,并积极尝试进行转换。但是,我想出了这个问题,我似乎无法找到一个好的教程或操作方法。这是正确使用上游标签。
我的例子是github.com托管的存储库,redmine。它包含许多用于稳定版本和分支的标记以及当前正在运行的主文件。
我通过发布
将它分配到我自己的系统上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)之前保持安全。
那么,我如何切换到上游的新标签,同时保留我对本地fork的提交?
我上面说过(我想我已经出错了)。从一些额外的阅读,我认为我应该分支远程标签一些如何,并提交到基于远程标签的新分支。这是因为我现在肯定我处于“独立的HEAD状态”,这显然很糟糕。
我是完全偏离基础,坚果,出错还是错过了这一点?这是不常见的情况吗?我错过了有关如何执行此操作的文档吗?
答案 0 :(得分:1)
如何从标签分支。
git checkout -b newBranch yourTag
请注意:
git clone --mirror https://github.com/redmine/redmine
就足够了(不需要提及.git,这将创建一个“redmine”目录,而不是readmine.git目录,这是一个为裸存储库保留的命名约定)git checkout aTag
会让您进入 detached HEAD mode ,这意味着,此时您需要创建一个新分支:git checkout aNewBranch
这将从您当前的提交(现在没有附加到任何分支)创建它
并注意子模块:它们本身以分离的HEAD模式签出:参见“How to make submodule with detached HEAD to be attached to actual HEAD?”和“How do I get git clone --recursive
to recreate submodules' remotes and branches?”