所以,假设我有一个可以通过ftp访问的Web服务器。大多数人使用Dreamweaver更新它,我通过在计算机和服务器之间手动复制和粘贴来更新。我的问题是,我可以使用git来管理网站(而不必手动复制/粘贴),而其他人则使用其他方法更新它吗?
我该如何设置? (另外,我可以将哪些脚本放在我的计算机上以使其更容易(钩子和非钩子)?(我知道如何制作它们,我只想提示我应该为这个工作流程做什么。))
注意:如果重要的话我使用linux。 (另外,我在命令行中使用git。)
注意:我可以手动执行一些通常不需要的东西(例如将我的队友变更为提交)。这是我想避免的手动复制和粘贴。
答案 0 :(得分:2)
当不在服务器上安装git时,您可以做的是在本地计算机上维护服务器网站的本地副本rsync。 如果您的服务器支持sftp,您可以使用csync(无需在服务器端安装它):它优于rsync和双向。
然后你可以拥有自己的git repo,每当你想要添加或比较网站的变化时,你可以切换分支,然后执行:
git --work-tree=/path/to/csync/folder status .
比较您当前的回购索引和反映该网站的同步本地文件夹。
您的git仓库中有两个分支,一个用于您当前的工作,另一个用于将该网站合并到回购中。
您可以在本地合并这两个,当您准备好后,使用csync< ed ed文件夹作为工作树检出仓库
git --work-tree=/path/to/csync/folder checkout HEAD -- .
答案 1 :(得分:1)
rsync
/ {{1} },mounting the ftp server locally或this结合了一些初始复制和粘贴功能。)csync
将receive.denyCurrentBranch
设置为updateInstead
。见Push to deploy。! [remote rejected] master -> master (Working directory has unstaged changes) error: failed to push some refs to '../remote'要解决此问题,您必须提交您的团队成员在远程服务器上所做的更改。你可能想要挑选这个。然后转到第4步。
git config receive.denyCurrentBranch "updateInstead"
等之前,您仍然需要执行git pull
等事情。)答案 2 :(得分:0)
我在一个网站上使用两台服务器来实现这一目标。生产,只有FTP访问和开发具有完全访问权限。我推动开发服务器,我有post-receive脚本,checkout bare repo到临时文件夹,而不是调用Python脚本,它将代码上传到FTP。我不知道允许其他人使用FTP的方法。你应该告诉他们使用git,它对每个人来说都更容易,你也可以更好地控制代码。如果您有此设置,则只能有一个分支推送到生产服务器,而其他分支只是开发。
答案 3 :(得分:0)
我没有这样做,看看它有多可用,但你可以使用例如curlftpfs挂载远程目录。我希望这能为您提供一些使用它的替代方案:
.git
环境变量指定的目录下本地存储(即GIT_DIR
的内容)。 core.worktree应配置为ftp mount。.git
子目录的真实存储库,执行git init
等。.git
file而不是使用GIT_DIR
环境变量。很大程度上取决于你是否是唯一的git用户,或者是否有其他人在ftp目录中对你的私人更改感到困扰。