git clone 从本地到远程

标签 git ssh deployment remote-server

我们正在将我们的工作流程从 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 --barescp 本地 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/

相关文章:

git - 如何仅在更改特定文件的提交上运行 git bisect?

php - PHP中的SSH连接和命令

sql - 将包部署到 SQL Server 时出现 SSIS 部署错误

java.sql.SQLException : Opening db :'DB-NAME.sqlite' : Permission denied

git - 如何使emacs + egg(git)与远程文件一起工作(通过ssh访问)

git - LibGit2Sharp - 传出和传入提交列表

linux - 通过 SSH 传递脚本和字符串

git - osx - gitolite : login with git user from terminal

c++ - 使用外部 *.lib 文件进行 Qt 部署

git - 我应该如何更新过时的 fork ?