2012-06-05 77 views
2

我似乎无法找到任何帮助我的情况&希望有人可以帮助我,因为我不完全熟悉git,但是很爱它。Git - 合并非Git文件夹与git下的类似文件夹

我们有一个在git控制下显示我们开发分支的开发服务器。然后,除了具有稳定版本的网站的开发分支之外,我们还有一个主分支。

然后,在我们的生产服务器上,我们有稳定的站点,但由于事情发生了,它不受git版本控制,我们只是手动更新了我们需要的文件。显然,稳定的主分支文件看起来有点类似于手动管理的生产文件集。

我们希望最终在git控制下获得生产服务器,显示master分支,就像dev服务器反映dev分支一样。

但是,我不知道如何去设置生产服务器上的git repo,并以某种方式将它与主分支合并。任何人都可以提供一些指针,提示或方向?

我在网上发现的唯一一件事情是沿着设置另外两个回购的路线(总共3个回合),其中一个是另外两个回收站的父母,并以某种方式将它们整合在一起。我希望有一个不同的解决方案(或者至少一个“雅,这是正确的”,所以我不会去一个愚蠢的兔子洞(不知道这个Merging two folders using git可能是某种开始??但缺乏回应它很难看到,如果这是追求)

感谢所有正确的事情。

回答

1

如果我给你正确的生产服务器上的网站是基于master分支(或在您的git回购一些其他承诺),但不完全相同,即有一些手动更改,你不想失去这种手动更改。以下是我在这种情况下做的事情:

  1. 检出或克隆您的主分支(或提交您的生产服务器数据所基于的地方)。
  2. 你现在有一个干净的工作副本与生产服务器“基地”。
  3. 将生产服务器上的所有数据复制到这个干净的工作副本。
  4. 使用git diff检查所有更改并提交相关的更改。
  5. 如果您在步骤1中签出的基地不是您的主人,您现在可以简单地将使用git merge master的手动更改与您的主人合并。

我希望我能正确理解你,并且这会引导你朝着正确的方向前进。

+0

谢谢siegi!乍一看,我以为你有点失落,但实际上我认为这只是它!不幸的是,生产文件将成为一个巨大的文件大杂烩,这些文件并不完全来自任何特定的提交,并且大部分是手动的(但我相信它们与我的历史中的东西类似。所以我想我会做像这样的事情,并且交叉我的手指,git diff不是太可笑! 感谢您的及时响应;-)我会回发它如何去。队友的欢呼声! – jstats

0

您不必版本化生产服务器:它应该已经被版本化!

你需要做的是有一个回购什么,将要到处部署:生产服务器,临时服务器,本地开发机等

,但是你想你会在本地工作,但在在生产服务器上,您只需保留主分支
在本地,当你完成某件事情时,它已经完全工作,测试等。只需将其重新组合(或合并)成即可(git push origin master)。然后,在您的生产服务器git fetch && git rebase origin/master(或拉)以获取更改。

+0

感谢您澄清任何疑问,这些有时是救命!我们其实只有一个回购单,我想我只是使用了错误的术语。 : - /你描述的几乎是我们的配置,我只需要将生产服务器上手动更新的文件转换为git控制下并将其设置为主分支;-)谢谢Samy – jstats

+0

什么样的修改文件?如果你的意思是上传的文件,你不应该版本。如果是配置文件,则可以使用环境变量来设置配置信息;或版本*模板*配置文件(仅后缀-dist),并忽略原始配置文件,然后从生产服务器中的版本化配置文件创建配置文件。我建议你看看关于部署良好实践的12factor.net。 –

0

您无法可靠推送到具有工作目录的存储库。你会得到关于非裸仓库的错误,并且与系统作战会对你的溃疡有害。

什么你应该做的是:

  1. 的rsync/SCP您的生产文件到本地系统,并与相应的分支(如主机)合并。
  2. 将您的主分支推送到您的生产主机可见的存储库。
  3. 从生产机器运行git clone
  4. 由于您不再对生产主机进行更改,因此您甚至可以将git pull设置为cron作业。

只要你不把在你的Git生产的机器上工作树手动更改,你会不会当你要推出的最新变化必须做其他任何事情比git pull。只要记住:从您的生产系统拉,不要推它。

+0

罗杰,谢谢。我们在开发服务器上使用更新后的挂钩进行这种设置。烦人的事情将是当服务器想修改文件(如wordpress更新或其他)时,但我相信有另一个钩子来处理这个有点顺利,我读了关于[这个网络为重点的git工作流blogpost](http:// joemaller .COM/990/A-网络为重点,git的工作流程/) – jstats