即使其他人没有使用git,我可以使用git来管理网站吗?

4
假设我有一个 Web 服务器,可以通过 FTP 访问。大多数人使用 Dreamweaver 更新它,而我是通过在我的计算机和服务器之间手动复制/粘贴来更新的。我的问题是,当其他人使用其他方法更新时,我能否使用 git 来管理网站(而无需手动复制/粘贴)?
  • 我不能在服务器上安装太多东西。我希望只需将文件放到服务器上即可设置此项。
  • 我不想手动复制和粘贴上传到服务器。
  • 我不想无意中撤销其他未使用 git 的人的更改,也不想让他们使用 git。
    • 话虽如此,如果我和其他人同时编辑网站,我希望利用 git 的合并功能。

应该如何设置?(还有,我可以在计算机上放哪些脚本使这个过程更容易(包括钩子和非钩子)?(我知道如何制作它们,只是希望有关此工作流程应该制作哪种类型的提示。))

注意:我使用的是 Linux 操作系统,如果有影响的话。(另外,我使用命令行中的 git。)

注意:我可以手动完成一些通常不需要的任务(例如将队友的更改转换为提交)。我想避免的是手动复制和粘贴。


你能在服务器上安装Git并从命令行运行Git命令吗?还是你的访问权限限于FTP? - imgx64
很抱歉,如果无法在服务器上运行git,我想不出任何解决此问题的方法。 - imgx64
你能否通过 ssh 登录到这台服务器? - Guildencrantz
哦,你没有提到:你的本地操作系统是什么? - Guildencrantz
@imgx64 我非常确定这是可能的(参见这个)。我只是想要一些有关工作流程细节的建议。 - PyRulez
显示剩余2条评论
4个回答

2
您不需要在服务器上安装git,可以在本地维护一个与服务器网站同步的本地副本。如果您的服务器支持sftp,则可以使用csync(无需在服务器端安装),它比rsync更好,并且是双向的。
然后,您可以拥有自己的git仓库,每当您想要添加或比较网站上的更改时,可以切换分支并执行以下操作:
git --work-tree=/path/to/csync/folder status .

将以下文本翻译成中文:

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

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

您可以在本地合并这两个分支,当您准备好时,使用同步的文件夹作为工作树来检出仓库

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

我可以使用git --work-tree=ftp://server/location/folder status .代替使用rsync/csync吗? - PyRulez
1
不,git本身不支持ftp。如果你有兴趣,可以参考git-ftp项目:https://git-ftp.github.io/git-ftp/。 - Guildencrantz
1
@PyRulez 如果你有那个,那么我的答案也适用(不需要csync)。 - VonC
1
@PyRulez 但 VonC 是对的:如果网站文件夹已经挂载,应该可以直接使用 git。但是你需要确保其他用户无法更改 .git 文件。 - Maurice Perry
1
@PyRulez太棒了!如果这对你有用,请告诉我们。 - VonC
显示剩余11条评论

1
  1. 以某种方式设置一个方法,使您可以运行影响FTP服务器的git命令(在您的计算机上),并能够推送到FTP服务器(例如使用rsync/csync将FTP服务器本地挂载,或者这个结合一些初始复制和粘贴)。
  2. 在服务器的git存储库中,通过命令git config receive.denyCurrentBranch "updateInstead"receive.denyCurrentBranch设置为updateInstead。请参见Push to deploy
  3. 现在,当您从本地存储库向服务器推送时,如果服务器已被修改,则会出现以下错误
    ![remote rejected] master -> master(工作目录有未提交的更改)error:failed to push some refs to '../remote'
    
    要解决此问题,您必须提交团队成员对远程服务器所做的更改。您可能想要挑选此项。然后进入第4步。
  4. 如果本地服务器与其git分支同步,则只需将其推送到它,它的工作树也将更新。(请记住,在执行git push之前,您仍然需要像执行git pull等操作。)

0

我没有尝试过这个方法的可用性,但是你可以使用例如 curlftpfs 挂载远端目录。我期望这会给你几个替代方案:

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

很多取决于你是否是唯一的 git 用户,还是其他人也关注你在 ftp 目录中的私有更改。


0

我在一个网站上使用两个服务器来实现这个目的。生产服务器只有FTP访问权限,而开发服务器则可以完全访问。我在开发服务器上进行推送,那里有一个post-receive脚本,用于将裸库检出到临时文件夹,然后调用Python脚本上传代码到FTP。我不知道如何允许其他人使用FTP。你应该真的告诉他们使用git,这样会更容易,你也将拥有更好的代码控制权。如果你拥有这样的设置,你可以只有一个分支用于推送到生产服务器,其他分支都是开发用的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接