我们正在将我们的工作流程从 Mercurial 迁移到 Git,我有两个小问题。
首先,是否可以将本地存储库直接“克隆”到一个空的远程 (ssh) 目录中?
目前,当我们创建一个新网站时,我们基本上是在本地克隆我们的 CMS,对其进行配置,然后我们将其克隆到中央仓库和网络服务器上 (hg clone .ssh://account@server/www
)。这样我们就可以立即获得推/pull 的好处。
这让我想到了第二个问题,远程部署。
目前使用 Mercurial,我在远程存储库中有一个简单的 Hook ,它在收到变更集时执行 hg up
。
要对 Git 执行相同的操作,我已按照此处的说明进行操作:http://caiustheory.com/automatically-deploying-website-from-remote-git-repository但我想将 .git 目录保留在网站根目录中,就像 Mercurial 一样(它受 Apache 配置保护,我无法为所有帐户导出 GIT_DIR,因为有些帐户有多个网站/存储库)。
是否可以在不将工作目录与存储库分开的情况下进行基本相同的设置?
最佳答案
要回答您的第一个问题,是的,您可以。假设远程目录是 ssh://user@host/home/user/repo
。这必须是一个 git 存储库,使用 git init --bare
或 scp
本地 repo.git
创建它(可以使用 git clone
) 目录到远程。然后做:
git remote add origin ssh://user@host/home/user/repo
git push --all origin
这会将所有本地存在的分支推送到远程存储库。
要回答下一个问题,您应该能够通过使用一组不同的命令来完成同样的事情。试试这些:
$ cd /var/www # or wherever
$ mkdir somesite
$ cd somesite/
$ git init
$ git --bare update-server-info
$ git config receive.denycurrentbranch ignore
$ cat > hooks/post-receive
#!/bin/sh
git checkout -f
^D
$ chmod +x hooks/post-receive
当然,您可以在此步骤之后运行上面的远程/推送命令。执行此操作后,您可能必须检查特定分支,以便服务器上的“somesite”克隆实际上知道要遵循哪个分支。从那时起,推送到该存储库应该会触发对该分支的重新 checkout 。
关于git clone 从本地到远程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4142936/