拉另一个Git分支而无需切换


55

我们最近从SVN切换到了Git,同时将实时系统置于版本控制中(而不是本地签出和实时复制文件)。

在分配给我的项目中,我们所有人都访问相同的存储库,并且要使更改生效,我们就git pull在那里。这会导致问题,因为我们的网站设计人员将更改推送到了VCS中,这些更改尚不应该生效,但应该在Web测试环境中进行。

当其中一名开发人员投入使用时,他获得了所有(可能未完成的)更改。

我想到了将活动切换到一个额外的分支,并只是合并了更改的内容,但是由于我缺乏git知识,所以我不知道该怎么做。

我的想法是:

  • 在实时(git branch live)中创建一个新分支。
  • 每次必须直播
    • 在主拉变化(如:git checkout master; git pull; git checkout live
    • git merge master

问题是切换到母版或将所有内容直接放入实时系统会导致问题,因此我宁愿避免这种情况。

有没有办法做到这一点,或者有没有更好的办法来管理Live系统(除了培训Webbie不要推送未完成的任务之外)。


git pull --all默认情况下不会将master拉入live,它将拉master并将其与master合并,并且(如果服务器上存在)将live合并到live。你试过了吗?
Tobias Kienzler

您的问题是否是由分支产生的,该文件不在分支机构控制下,并且在修改为master之后又添加了git-add?这就是我以前发生的事情,通常它足以临时重命名该文件,或者如果实时不需要它,请使用git checkout -f忽略该问题的方法-但进行备份!
Tobias Kienzler

Answers:


21

您可以git stash在签出master和pull之前使用,以及在签出live之后再次使用git stash pop(或者git是否更旧,git stash applygit stash clear假设您没有藏任何其他东西)


6
git pull --all会获取所有遥控器,但仍会尝试将一个分支(或默认分支)合并到当前分支中。
mipadi

@mipadi是的,但是只有当前分支本身没有尝试结账master并引起冲突,不是吗?
Tobias Kienzler

它将合并配置为自动合并到当前分支的任何分支(如果配置了这样的分支)。
mipadi

1
@Superole记录为“获取所有远程”,它不仅包括多个存储库,还包括分支。尽管事后看来,git fetch --all可能是一个更好的答案
Tobias Kienzler 2013年

2
@TobiasKienzler它仅指示git从所有已配置的遥控器中获取。最常见的情况是只有一个远程命名起源。如果您碰巧有一个以上的遥控器与您的当前树枝处于同一分支,并且它们彼此之间不具有快进关系,则使用该--all选项将为您提供章鱼将不同版本的树枝合并到当前的章鱼中!因此,我的建议是远离,--all除非那是您所追求的,因为在大多数其他情况下,它不会给您任何帮助。
Superole


5

首先解决问题。他们不应该将业务推向没有业务的分支。

您似乎要问的是

git checkout live
git pull origin master

这将尝试合并远程主服务器和您的活动分支。


问题是我们目前只有一个分支,而且由于每个人都已经习惯了SVN并且不愿意学习新事物的优势,因此我们不可能真正改变这一分支。只能在实时目录中创建一个新分支。我要避免将远程主服务器合并到活动分支,因为我无法阻止任何人向主服务器推送调试代码,不完整的功能,语法错误以及其他任何内容(毕竟,我只是初级开发人员)。不过谢谢您的建议。
Morfildur

2
@dbeme:您可以使用tarball和补丁。;)除非他们愿意学习git(并且完全不难分支和合并),否则您将遇到问题。
乔什·K

0

我建议您为每个人创建一个测试git repo。所有存储库,包括您的实时网站,都将是测试存储库的副本。通过这种方式,任何人都可以在不接触实时网站的情况下进行测试。当有人需要更新实时站点时,则可以从git测试库中提取实时站点。此工作流程与SVN非常相似。为了获得更大的灵活性,我建议使用您描述的“实时”分支。

总而言之,每个人的git repo是测试repo的克隆。现场制作站点也只是测试仓库的一个副本。另外,测试可以是实时产品的克隆,这样“ git push”总是向生产转移。

其他选项包括将“实时”分支添加到此安排中,或包括在测试和生产之间进行“分段”回购。为了提高安全性,我建议限制对实时git repo的访问,并强迫人们使用安全的脚本来完成实时生产。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.