2017-02-10 52 views
0

在我们的一个网站上,我们一直只使用Git来跟踪本地副本上的更改,然后使用Deploy HQ将更改部署到我们的实时服务器。我并不希望直接在现场服务器上做任何更改,所以我没有在那里设置Git repo。服务器上未跟踪的更改 - 如何与原始同步

但是,有人在服务器上直接更新CMS版本,所以现在我们的服务器有一堆未跟踪的更改。

我现在有两个目标:

  1. 设置一个回购的服务器上,以跟踪这些变化
  2. 同步我的原产地在GitHub的这些变化
从技术性

除了在服务器上设置Git,我想知道如何将服务器上的文件添加到现有的存储库,即使它们有新的未跟踪更改(我们希望保留)。

  • 我可以将.git和.gitignore文件从本地存储库放到服务器上吗?
  • 意识到发生的新变化是需要承诺的变化吗?

一旦我在那里正确设置了回购,我假设我可以将更改推送到GitHub中的Origin。

+0

这没有意义,你想实现什么目标?你在服务器上有没有跟踪的变化,所以你是否试图保持并推动这些变化到原点,我认为这是github?或者你想要将它与原点同步,这意味着服务器上那些未跟踪的更改将会丢失,因为原点可能没有它们。 – kabirbaidhya

回答

0

你可以摆脱那些乱七八糟的很轻松:

  • 在你的开发库,检查你的最后一个已知部署的分支或标记到该服务器:

    git reset --hard # careful, will throw away any previous changes 
    git checkout currently_deployed_version 
    

    你自己现在版本库与服务器应该完全相同,除非有人直接修改了服务器文件。显然,您可以提交或隐藏您现在正在处理的内容,而不是reset

  • 直接拷贝过来的服务器上的文件:

    rsync -a [email protected]:/path_to_installation/* path_to_your_existing_repo/ 
    

    您使用哪种工具并不重要;如果您没有rsync,则可以使用scp或者如果您使用的是Windows,则可以使用其他类似的工具。

  • 瞧:你现在得到您的diff免费

    git diff 
    

    它会告诉你什么直接的变化在哪里。你可以像往常一样从这里继续;提交,还原/结帐;根据需要修改;推送到任何适当的分支等。

  • 清理完所有东西后,可以再次部署;这次包括一个.git目录。使其深度为0(请参阅git help clone)以避免服务器上出现大量垃圾;这将足以在稍后为您提供服务器git diff,这反过来足以创建一个补丁文件,以便以理智(r)的方式将更改传输回开发计算机。

0

我不知道部署HQ,但不是它告诉你哪些文件已更改以及最后部署哪个提交?你应该能够将这些文件放到你的工作目录中,进行提交和推送。

另外,IIUC部署总部可能会创建其他文件作为脚本操作的结果。除非对生成的输出进行了这些更改,否则只需忽略它们在这种情况下,git不会帮助您合并这些更改,您必须导致无论如何反向修改这些更改。它仍然有助于审查差异。

从另一个工作副本中复制.git可以解决问题。但是,请确保检出与上次部署的相同的提交,否则您将看到太多更改。我想部署HQ日志应该能够告诉你部署了哪个提交。但是您可以通过执行git reset $COMMIT并检查差异来查找分支上的提交。根据提交次数,这可能是乏味的。

在找到正确的基本提交并在服务器上提交更改后,您可以将工作目录从服务器拉到您的机器并推送到github。

此外还有一个可能的警告。 Git的历史记录可能是公开可见的,如果其中包含任何意外犯下的敏感信息,攻击者可以访问这些信息。在这种情况下,您可以在不同的目录下创建.git,并设置GIT_DIR和GIT_WORK_TREE变量。但正如你所说,回购已经可以在github上访问,所以这可能不是问题。