【问题标题】:Gitlab repository with multiple branches to local具有多个本地分支的 Gitlab 存储库
【发布时间】:2021-09-02 09:14:03
【问题描述】:

这更像是一个澄清问题。在 Gitlab 中,您可以从同一个存储库创建多个分支,因此存储库 myrepository.git 可以有一个 master 分支,然后是一个 development 分支。

当我将存储库克隆到本地存储库时,我通常会创建一个分支,而不是包含所有分支的整个存储库,例如

git clone <url> --branch development --single-branch

如果我在多个分支上工作,我会为每个分支创建一个单独的目录。我的理由是这看起来更干净,因为我会知道我在哪些分支中工作,并且没有简单的方法可以在分支之间切换和同步文件。我做错了吗?您是否有理由希望在同一个目录中有多个分支?

谢谢。

【问题讨论】:

  • 这似乎是一种不必要的谨慎,它会导致比它防止的问题更多的问题。当然,这是我的观点,这就是为什么这个问题离题了。这是意见和具体工作流程的问题。
  • 您可以编辑 shell 提示符以显示当前签出的分支。见questions/15883416

标签: git gitlab git-branch git-remote


【解决方案1】:

在某些版本控制系统(和某些工作流程)中,您所说的完全有道理,因为您只有少数长期存在的分支。

与早期版本控制系统相比,git 的一个经常重复的优势是“分支很便宜”,导致工作流程中,每天创建和删除多个分支很常见。它通常看起来像这样:

  • 您开始处理一项任务,并为该特定任务创建一个新分支。
  • 您进行了一些更改,并将它们提交到该分支。
  • 也许你在完成之前被叫去处理更紧急的事情 - 没关系,你可以查看“main”/“master”/“develop”分支并在不同的分支上工作,然后返回到你是。
  • 您以满意的方式完成任务,然后将其推送到 Github 等中心位置。
  • 您的同事(甚至您自己)会在 Web 界面中查看更改并确保可以合并。
  • 也许有人会检查它们并进行一些测试;也许一个自动化脚本会检查它们并运行一些测试。
  • 最后,将更改合并到“main”/“master”/“develop”分支并删除任务分支。

所有这一切都依赖于易于创建的分支,并且易于在它们之间切换,如果将每个目录绑定到一个命名的分支,这将不再适用。

【讨论】:

  • 也许这确实源于对 Git 的不完全理解。我一生中的大部分时间都在使用与 Git 不同的体系结构的 CVS 和 Clearcase 等系统上工作。如果我将远程存储库签出到本地存储库。然后如何在本地存储库中的分支之间切换并更新代码?如果我将 Git 切换到不同的分支,目录中的代码不会改变。我想我在这里遗漏了一些东西。
  • @GavinSiu git switch(或git checkout)将检查特定分支上的提交代码(更具体地说,是最新提交中整个存储库的快照在那个分支上)。它不会(默认情况下)覆盖任何 未提交 更改 - 它尽量不做任何您无法撤消的事情。因此,如果您在切换分支时看到代码没有更改,我的猜测是您还没有提交它(或者,它恰好在两个分支上都是相同的)。我从来没有用过 ClearCase,但你可能会找到一个两者都用过的人写的 git 教程。
  • @GavinSiu 如果您还没有阅读过tour,请注意本网站并非旨在充当论坛;此处的 cmets 框旨在对答案进行简短说明(这可能就是您的评论在句子中间被截断的原因)。如果您需要对场景进行长时间解释,则可能应该将其作为一个新问题提出(并首先搜索现有的类似问题!)
  • 嗨,我已经完成了教程,但经常有一些细节问题没有涉及。我尝试了以下 1)通过 git clone url 克隆远程存储库,2)通过 git checkout dev 切换 dev 分支。 3)检查与dev不同的文件,然后输入git checkout master,它会切换回来并更改文件。这不是我之前观察到的情况,这意味着我可能打错了一些东西,并对 Git 的工作方式产生了混乱的印象。
【解决方案2】:

感谢大家的帮助。经过一些实验,我相信我最初在尝试 Gitlab 时弄错了,所以我的程序是基于错误的假设。我做了这样的事情:

  1. 使用 git clone 克隆远程仓库的本地仓库。
  2. 在命令行中更改为克隆本地存储库。
  3. 使用 git checkout 尝试从主分支切换到开发分支。发生的事情是我注意到文件没有更新到开发分支,我仍然得到了主分支文件,所以我错误地认为这不能用 Gitlab 完成。

进一步的实验无法复制此行为。 Git checkout 有效,如果您对文件进行了更改,它会警告您提交,正如我所预期的那样。我认为可能当时 VPN 没有运行,这是连接到 Gitlab 存储库所必需的,但我认为我应该在运行 git checkout 时超时,所以我仍然不确定发生了什么。

只是为了让大家知道我问的不是必要的。无需为每个分支设置单独的目录。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-29
    • 1970-01-01
    • 2011-07-27
    • 1970-01-01
    • 2022-11-09
    • 1970-01-01
    相关资源
    最近更新 更多