使用Git在Windows上管理网站

3
我有一个运行在Windows 2008服务器上的网站。我想知道最佳方法是使用git来管理该网站。理想情况下,我希望能够自动化部署,使用post-receive hook或类似的东西。
我有一个Linux服务器,通常用作我的git起源服务器,所以如果可以简化操作,我可以利用它。在那里,我的post-receive文件通常是这样的:
#!/bin/sh
GIT_WORK_TREE=/var/www/example.com git checkout -f

显然,这在Windows上不会直接起作用,需要有其他的事项安排。

我的Windows服务器支持FTP,但是如果可能的话,我希望使用更加安全的东西。

2个回答

0

你可以在你的bash脚本中使用Windows路径(这将由Windows上的msysgit解释)。

/C/my/path/...

这里有一个相当复杂的post-checkout挂钩示例(不是post-receive,但可以说明在bash hook脚本中在Windows上可以做什么)。

更多细节请参阅“Combining mingw and git”。

实际上,Adam Rofer 在评论中提到:

If you use normal windows sharing, you can access git repositories via this path syntax:

//computername/folder/repo.git 

assuming folder is the shared folder accessible to your login via normal windows folder sharing. Msysgit seems to play well with this.


好的,那么这可能解决了 post-receive 钩子的问题,但是我如何从远程 PC 推送到 Windows 服务器呢?通常我使用 ssh,但我不知道它在 Windows 上如何工作,或者是否实际可行。 - Peter Meth
@Peter:我通常在我的仓库前面放置一个Apache服务器,并使用https会话+git-http-backend脚本(https://dev59.com/Y2435IYBdhLWcg3wtCWQ#5265022)。 - VonC
那听起来是一个有趣的选择,我以后会检查一下。现在我更喜欢使用ssh方式,因为它可以与我现有的Linux设置相似。 - Peter Meth
如果您使用普通的Windows共享,可以通过以下路径语法访问git存储库://计算机名/文件夹/存储库.git,假设文件夹是通过普通Windows文件夹共享对您的登录可访问的共享文件夹。Msysgit似乎与此兼容良好。 - Adam Rofer
@AdamRofer 很有趣。我已经将您的评论包含在答案中以增加可见性。 - VonC

0

最终我使用了这些指示来设置Cygwin + OpenSSH + Git,这让我完成了大部分工作。

http://www.shannoncornish.com/blog/2009/04/git-server-windows-2008/

在 post-receive 中,由于某些权限问题,我不得不删除第一行 #!/bin/sh,并且我通过 Cygwin 添加了一个符号链接到我的 Web 根目录,如下所示:
ln -s /cygdrive/c/inetpub/wwwroot /var/www

所以post-receive文件最终看起来与之前非常相似,但没有第一行

GIT_WORK_TREE=/var/www/example.com git checkout -f

有趣,但我真的建议避免在Cygwin中使用Git(它比msysgit发行版慢得多)。我宁愿使用来自Cygwin的sshd和msysgit:http://superuser.com/questions/325639/make-msysgit-work-with-cygwin-ssh - VonC
是的,我注意到它真的很慢,但对于我大部分做的事情来说,这并不是什么大问题。此外,我在让我的 post-receive 钩子正常工作方面遇到了一些麻烦。 - Peter Meth
@VonC 根据您的建议,我切换到了使用cygwin sshd的msysgit。 它的设置要困难得多。 我想我终于搞定了,但现在我遇到了拉取和推送的问题。 当我尝试 git clone ssh://git@myserver.com/var/git/example.git 时,它说这不是一个git仓库。 凭直觉,我尝试了 git clone ssh://git@myserver.com:c:/cygwin/var/git/example.git ,它奏效了。 然而,当我尝试从克隆中推送时,它说 /cygwin/var/git/example.git 不是有效的git命令。 看起来路径出了些问题。 - Peter Meth
有趣。这可能需要另一个问题,详细说明您的新设置(包括所有涉及产品的版本号,包括您的Windows版本),并且会详细提到您的错误消息。并且链接到原始上下文的此问题。 - VonC
https://dev59.com/qmDVa4cB1Zd3GeqPc2BZ - Peter Meth

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