Git网站部署

3
我已经配置好了git以部署我的网站。 我有一个主分支,它是网站的实时状态。如果我将其推送到裸仓库,网站就会被上传。 然后我有一个develop分支,我可以在其中测试所有内容。如果我将其与实时分支合并,然后推送它,它将变为实时状态。
但我还有一个问题。 我找到了两种使用git部署网站的解决方案。 这两种解决方案之间的区别仅在于所使用的钩子。 对于第一种解决方案,它使用git pull来创建我的www根目录。这意味着我需要一个作为www根目录的repo。 第二种解决方案使用git checkout -f,它不需要是一个repo。 我不知道哪个更适合我的需求。
我的问题是,其他用户可以使用ftp客户端在我的web服务器上添加/更改/删除文件。 问题是没有任何东西使用git提交。现在我需要在我的裸仓库中将更改内容放入我的主分支中。 但是我该如何做呢?我认为如果www根目录是一个repo,我必须先进行提交或其他操作,然后将其拉到我的裸仓库中。 如果www根目录不是一个repo,是否可以这样做?如果我拉取主分支,如何自动获取我的www根目录中的内容放入我的主分支中?
2个回答

0

我认为更标准的做法是使用git checkout -f方法(或类似的方法,如git archive),其中您的www不是git repo,而是在推送时使用钩子从裸repo中检出的。

当您将此类东西用于部署时,您必须确保每个人都提交到git(最好还应该有CI、测试等)并将其推送到生产环境。您不能让人们通过FTP等上传到生产环境,并且在侧面也有这种机制。这只会引发麻烦。

如果您无法阻止人们进行此类更改,则将www根目录设置为repo更有意义,因为您可以跟踪更改并将其推送到裸repo。即使它不是repo,您仍然可以在服务器上设置另一个repo,在该repo中复制www根目录中的文件并将其提交。


据我所了解,使用 checkout -f 和 archive 命令时,每次都必须创建一个新的 WWW 根目录,因为有文件传输并且如果某个文件被删除,则仅覆盖文件将不会在 WWW 根目录中删除该文件,这样理解是否正确? 我无法避免使用 FTP 上传文件。但是如何自动跟踪更改?我的意思是,我想从我的工作站拉取。 这应该告诉我的裸仓库从服务器提取当前的实时网站。 如果 WWW 根目录是一个仓库,那么我该如何做到这一点? 如果不是呢? - user1058712

0
如果我正确理解您的情况,最好不要从Web根目录推送到裸仓库,然后从该裸仓库拉取到本地机器。将Web根目录中的文件与本地仓库同步(例如使用rsync),在本地机器上处理所有git操作(diff、add、commit等),然后将其推送到裸仓库,裸仓库可以触发Web根目录中的检出。这样做会更好,您觉得呢?

我认为我需要做类似的事情。我的问题是用户可以通过FTP在Web根目录上创建文件,这些文件不应该被删除。但是我在仓库中删除的文件应该会在Web根目录中被删除。或许我会使用git-ftp,或者我必须将Web根目录中的文件与本地同步,然后才能提交我的更改。 - user1058712

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