【问题标题】:Can I use git to manage a website even if other people update it without using git?即使其他人不使用 git 更新网站,我也可以使用 git 管理网站吗?
【发布时间】:2016-04-14 04:54:38
【问题描述】:

假设我有一个可以通过 ftp 访问的 Web 服务器。大多数人使用dreamweaver更新它,而我基本上是通过在我的计算机和服务器之间手动复制和粘贴来更新它。我的问题是,我可以使用 git 来管理网站(而不必手动复制/粘贴),而其他人使用其他方法更新它吗?

  • 我无法在服务器上安装很多东西。我只想将文件放在服务器上进行设置。
  • 我不想手动复制粘贴上传到服务器。
  • 我不想无意中撤消其他不使用 git 的人所做的更改,也不想让他们使用 git。
    • 也就是说,如果我和其他人同时编辑网站,我会想利用 git 的合并功能。

我应该如何设置? (另外,我可以在我的电脑上放什么脚本来让这更容易(钩子和非钩子)?(我知道如何制作它们,我只是想知道我应该为这个工作流程做什么样的提示。))

注意:我使用 linux,如果这很重要的话。 (另外,我从命令行使用 git)。

注意:我可以手动做一些通常不需要的事情(例如将我的队友更改为提交)。我想避免手动复制和粘贴。

【问题讨论】:

  • 你可以在服务器上安装 git 并从命令行运行 git 命令吗?还是您的访问权限仅限于 ftp?
  • @imgx64 FTP 基本上是我所得到的。 (我可以在上面放一个 git repo。)
  • 如果不能在服务器上运行 git,我想不出任何办法,抱歉。
  • 你能ssh进入这个服务器吗?
  • @Guildencratz 我不这么认为。

标签: git version-control ftp server ftp-server


【解决方案1】:

我还没有这样做来查看它的可用性,但是您可以使用 curlftpfs 等挂载远程目录。我希望这会为您提供一些使用它的替代方法:

  1. 保持未修改,仅包含工作文件,并在本地由GIT_DIR 环境变量指定的目录中拥有存储库(即.git 的内容)。 core.worktree 应配置为 ftp 挂载。
  2. 您可以将它作为一个真正的存储库,并带有.git 子目录、git init 等。
  3. 在其中包含一个.git file,而不是使用GIT_DIR 环境变量。
  4. 在进行一些手动设置后,可以使用 git worktree 对其进行管理,因为目前没有将现有目录自动转换为工作树。

很大程度上取决于您是否是唯一的 git 用户,或者是否有其他人为您在 ftp 目录中的私人更改而烦恼。

【讨论】:

    【解决方案2】:
    1. 不知何故设置了一个方法,你可以运行 git 命令(在你的计算机上)影响 FTP 服务器,以及能够推送到 FTP 服务器(例如使用rsync/csync、@987654321 @ 或 this 结合一些初始复制和粘贴)。
    2. 在服务器 git repo 中,通过命令 git config receive.denyCurrentBranch "updateInstead"receive.denyCurrentBranch 设置为 updateInstead。见Push to deploy
    3. 现在,当您从本地 repo 推送服务器时,如果服务器已被修改,您将收到如下错误 ! [remote denied] master -> master (Working directory has unstaged changes) error: failed to push some refs to '../remote' 要解决此问题,您必须提交队友在远程服务器上所做的更改。你可能想挑选这个。然后转到第 4 步。
    4. 如果本地服务器与其 git 分支同步,您只需推送到它,它的工作树也会更新。 (请记住,您仍然需要在 git push 之前执行 git pull 等操作。)

    【讨论】:

      【解决方案3】:

      在服务器上安装 git 时,您可以做的是在本地计算机上维护服务器网站的本地副本 rsync。
      如果你的服务器支持sftp,可以使用csync(无需在服务器端安装):比rsync好,而且是双向的。

      然后你就可以拥有自己的 git repo,并且每当你想从网站上添加或比较更改时,你可以切换分支,然后:

      git --work-tree=/path/to/csync/folder status .
      

      比较您当前的回购索引和反映网站的同步本地文件夹。

      您的 git 存储库中有两个分支,一个用于您当前的工作,一个用于将网站合并到存储库中。

      您可以在本地合并两者,当您准备好时,您可以使用 csync 文件夹作为工作树来签出 repo

      git --work-tree=/path/to/csync/folder checkout HEAD -- .
      

      【讨论】:

      • 我可以用git --work-tree=ftp://server/location/folder status .代替rsync/csync吗?
      • 不,git 本身不支持ftp。如果你有兴趣,有一个git-ftp 项目:git-ftp.github.io/git-ftp
      • @PyRulez 如果你有,那么我的回答也适用(不需要 csync)。
      • @PyRulez 但 VonC 是对的:如果安装了网站文件夹,应该可以直接使用 git。您应该确保 .git 不能被其他用户更改。
      • @PyRulez 太棒了!让我们知道这是否适合您。
      【解决方案4】:

      为此,我在一个网站上使用了两台服务器。生产,只有 FTP 访问和开发,完全访问。我确实在开发服务器上推送,我有 post-receive 脚本,它将裸仓库签出到临时文件夹,然后调用 Python 脚本,它将代码上传到 FTP。我不知道允许其他人使用 FTP 的方法。你真的应该告诉他们使用 git,这对每个人来说都会更容易,而且你也可以更好地控制代码。如果你有这个设置,你可以只有一个分支推送到生产服务器,其他的将只是开发。

      【讨论】:

        猜你喜欢
        • 2013-07-13
        • 2013-01-07
        • 2012-03-01
        • 1970-01-01
        • 2013-01-04
        • 2013-09-19
        • 2021-02-11
        • 2020-10-05
        • 2015-04-13
        相关资源
        最近更新 更多