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

Git 服务器上未跟踪的更改-如何与源服务器同步,git,github,Git,Github,在我们的一个网站上,我们只使用Git跟踪本地副本上的更改,然后使用Deploy HQ将更改部署到我们的live server。我不希望直接在live服务器上进行任何更改,因此我没有在那里设置Git repo 然而,有人直接在服务器上更新了CMS版本,所以现在我们的服务器有一大堆未跟踪的更改 我现在有两个目标: 在服务器上设置repo以跟踪这些更改 将GitHub中的我的源代码与这些更改同步 除了在服务器上设置Git的技术性问题外,我还想知道如何将服务器上的文件添加到现有存储库中,即使它们有新的未

在我们的一个网站上,我们只使用Git跟踪本地副本上的更改,然后使用Deploy HQ将更改部署到我们的live server。我不希望直接在live服务器上进行任何更改,因此我没有在那里设置Git repo

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

我现在有两个目标:

  • 在服务器上设置repo以跟踪这些更改
  • 将GitHub中的我的源代码与这些更改同步
  • 除了在服务器上设置Git的技术性问题外,我还想知道如何将服务器上的文件添加到现有存储库中,即使它们有新的未跟踪更改(我们希望保留这些更改)

    • 我可以将本地存储库中的.git和.gitignore文件放到服务器上吗
    • 这会将发生的新变化视为需要提交的变化吗

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

    我不知道Deploy HQ,但它不是告诉您哪些文件已更改,哪些提交是最后一次部署的吗?您应该能够将这些文件发送到您的工作目录、提交和推送

    此外,部署总部可能会根据脚本操作创建其他文件。只需忽略这些,除非对生成的输出进行了这些更改。在这种情况下,git不会帮助您合并更改,您将不得不对更改进行反向工程。它仍然有助于审查差异

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

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


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

    我不知道Deploy HQ,但它不是在告诉您哪些文件已更改,哪些提交是最后部署的吗?您应该能够将这些文件发送到您的工作目录、提交和推送

    此外,部署总部可能会根据脚本操作创建其他文件。只需忽略这些,除非对生成的输出进行了这些更改。在这种情况下,git不会帮助您合并更改,您将不得不对更改进行反向工程。它仍然有助于审查差异

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

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


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

    您可以非常轻松地摆脱困境:

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

      git reset --hard   # careful, will throw away any previous changes
      git checkout currently_deployed_version
      
      您自己的存储库现在与服务器完全相同,除非有人直接修改了服务器文件。显然,您可以提交或隐藏当前正在处理的内容,而不是重置

    • 直接复制服务器文件:

      rsync -a user@server:/path_to_installation/* path_to_your_existing_repo/
      
      使用哪种工具并不重要;如果您没有
      rsync
      ,您可以使用
      scp
      ,或者,如果您在Windows上,可以使用任何其他类似的工具

    • 沃拉:你现在可以免费获得你的diff了

      git diff
      
      它将直接向您显示更改的位置。你可以像往常一样从这里继续下去;提交、还原/签出;根据需要修改;推到任何合适的分支等

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


      • 你可以很容易地摆脱困境:

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

          git reset --hard   # careful, will throw away any previous changes
          git checkout currently_deployed_version
          
          您自己的存储库现在与服务器完全相同,除非有人直接修改了服务器文件。显然,您可以提交或隐藏当前正在处理的内容,而不是重置

        • 直接复制服务器文件:

          rsync -a user@server:/path_to_installation/* path_to_your_existing_repo/
          
          使用哪种工具并不重要;如果没有
          rsync
          ,可以使用
          scp