服务器上未经跟踪的更改 - 如何与Origin同步

时间:2017-02-10 16:31:49

标签: git github

在我们的一个网站上,我们一直使用Git跟踪本地副本的更改,然后使用Deploy HQ将更改部署到我们的实时服务器。我没想到会在实时服务器上直接进行任何更改,所以我没有在那里设置Git仓库。

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

我现在有两个目标:

  1. 在服务器上设置回购以跟踪这些更改
  2. 将我在GitHub中的原点与这些更改同步
  3. 除了在服务器上设置Git的技术细节之外,我想知道如何将服务器上的文件添加到现有存储库,即使它们有新的未跟踪更改(我们希望保留)。

    • 我可以将.git和.gitignore文件从我的本地存储库放到服务器上吗?
    • 是否会识别出需要提交更改的新更改?

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

2 个答案:

答案 0 :(得分:0)

我不知道Deploy HQ,但是它不是在告诉你哪些文件发生了变化,哪些提交被部署为最后?您应该能够将这些文件提供给工作目录,提交和推送。

此外,IIUC Deploy HQ可能会因脚本操作而创建其他文件。除非对生成的输出进行了这些更改,否则请忽略这些。在这种情况下,git无法帮助您合并更改,无论如何都必须对逆向工程进行逆向修改。它仍然有助于审查差异。

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

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

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

答案 1 :(得分:0)

你可以很容易地摆脱这种混乱:

  • 在您的开发存储库中,查看上次已知部署到该服务器的分支或标记:

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

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

  • 直接复制服务器文件:

    rsync -a user@server:/path_to_installation/* path_to_your_existing_repo/
    

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

  • Voilá:你现在可以免费获得差异

    git diff
    

    它会直接显示更改的位置。你可以像往常一样从这里继续;提交,还原/结账;根据需要修改;推送到任何适当的分支等。

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