我们最近从 SVN 切换到 Git,同时将我们的实时系统纳入版本控制(而不是本地签出并将文件复制到实时系统)。
在我负责的项目中,我们都访问同一个存储库,只需git pull
在那里就可以将更改发布到 VCS。这会导致问题,因为我们的 Web 设计师将更改推送到 VCS,而这些更改不应发布到 VCS,而应该发布到 Web 测试环境中。
当其中一位开发人员开始上线时,他会得到所有(可能是未完成的)更改。
我想过切换到一个额外的分支并只合并更改的内容,但由于我缺乏 git 知识,我不知道该怎么做。
我的想法是:
- 在 live 中创建一个新分支(
git branch live
)。 - 每次有事要上线时
- 在 master 中拉取变更(例如
git checkout master; git pull; git checkout live
:) git merge master
- 在 master 中拉取变更(例如
问题是,切换到主系统或将所有内容直接拉入实时系统会导致问题,所以我希望避免这种情况。
有什么方法可以做到这一点,或者有什么更好的方法来管理实时系统(除了培训网络人员不要推送未完成的东西)?
答案1
答案2
您可以使用git stash
在检查 master 和 pull 之前,并在再次检查 live 之后使用git stash pop
(或者如果你的 git 比较旧,git stash apply
并且git stash clear
假设你没有存储任何其他东西)
答案3
先解决问题。他们不应该将推送推送到与他们无关的分支。
你似乎想问的是
git checkout live
git pull origin master
这将尝试合并远程主服务器和您的实时分支。
答案4
我建议您创建一个测试 git 存储库供所有人提交。所有存储库(包括您的实时网站)都将是测试存储库的克隆。通过这种方式,任何人都可以推送到测试,而无需接触实时网站。当有人需要更新实时网站时,您可以从 git 测试存储库中拉取实时网站。此工作流程与 SVN 非常相似。为了获得额外的灵活性,我建议使用您描述的“实时”分支。
总而言之,每个人的 git 仓库都是测试仓库的克隆。实时生产站点也只是测试仓库的克隆。或者,测试可以是实时生产的克隆,因此“git push”始终朝向生产方向移动。
其他选项包括将“实时”分支添加到此安排中,或在测试和生产之间包含“暂存”存储库。为了提高安全性,我建议限制对实时 git 存储库的访问,并强制人们使用安全脚本来执行实时生产。