git clone从local到remote

hli*_*tbe 27 git deployment ssh remote-server

我们正在从Mercurial迁移到Git以实现我们的工作流程,我有两个小问题.

首先,是否可以将本地存储库直接"克隆"到空的远程(ssh)目录中?

目前,当我们创建一个新网站时,我们基本上在本地克隆我们的CMS,配置它,然后我们在中央存储库和网络服务器(hg clone . ssh://account@server/www)上克隆它.这样我们就可以即时访问推/拉优势.

这让我想到了第二个问题,即远程部署.

目前使用Mercurial,我在远程repos中有一个简单的钩子,它hg up在收到变更集时执行.

为了对Git做同样的事情我遵循了这里的说明:http://caiustheory.com/automatically-deploying-website-from-remote-git-repository但我想将.git目录保存在网站root中就像Mercurial的情况一样(它受Apache配置保护,我无法为所有帐户导出GIT_DIR,因为有些网站有多个网站/回购).

是否可以在没有将工作目录与回购分离的情况下进行基本相同的设置?

cdh*_*wie 40

要回答你的第一个问题,是的,你可以.假设远程目录是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
Run Code Online (Sandbox Code Playgroud)

这会将所有本地存在的分支推送到远程存储库.

要了解下一个问题,您应该可以使用一组不同的命令来执行相同的操作.试试这些:

$ 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
Run Code Online (Sandbox Code Playgroud)

当然,您可以此步骤之后运行上面的远程/推送命令.您可能必须在执行此操作后签出特定分支,以便服务器上的"somesite"克隆实际知道要遵循哪个分支.从那时起,推送到该存储库应该触发重新检查该分支.


OOP*_*Man 24

我最近也遇到过这个问题并解决了如下问题:

在远程服务器上:

1:创建名为/ tmp/bare的目录
2:更改到该目录
3:执行git init --bare

在本地机器上:

1:更改为你的git项目目录
2:git remote add bare ssh:// user @ server/tmp/bare
3:git push --all bare
4:git remote remove bare

在远程服务器上:

1:git clone/tmp/bare/path/to/your/clone

在本地机器上:

1:git remote add origin ssh:// user @ server/path/to/your/clone

这有点牵扯,但它可以工作,不需要设置任何奇怪的标志或指示git覆盖其默认行为.因此非常安全.