如何通过 SSH 将 Git 存储库推送到文件夹?

如何通过 SSH 将 Git 存储库推送到文件夹?

我有一个名为 my-project 的文件夹,里面我做了git initgit 提交 -a, ETC。

现在我想将其推送到远程服务器上 /mnt/foo/bar 的一个空文件夹。

我怎样才能做到这一点?

根据我读到的内容,我确实尝试过:

cd my-project
git remote add origin ssh://user@host/mnt/foo/bar/my-project.git
git push origin master

这似乎不正确(我认为源应该在目标之前)并且失败了:

fatal: '/mnt/boxee/git/midwinter-physiotherapy.git' does not appear to be a git repository
fatal: The remote end hung up unexpectedly

我希望这样工作,这样我就不必每次都访问远程主机并手动初始化 Git 存储库...我必须这样做吗?我走的路对吗?

答案1

该命令是正确的;但是,远程地址也必须指向已初始化的 Git 存储库。不过,这是一次性的工作。

ssh user@host "git init --bare /mnt/foo/bar/my-project.git"

(在 Git 中,“裸”存储库是指没有工作树的存储库。)

答案2

如果你想同时推送到 repo并在服务器上更新文件,您可以创建一个服务器端 git hook 来在文件推送后签出它们。在服务器侧 git/hooks/目录创建一个名为的文件post-receive并添加以下代码(更新目录以匹配您的文件夹结构):

#!/bin/sh
git --work-tree=/var/www/domain.com --git-dir=/var/repo/site.git checkout -f

然后使用以下命令赋予文件适当的权限chmod +x post-receive

更多信息和详细解释在这里: https://www.digitalocean.com/community/tutorials/how-to-set-up-automatic-deployment-with-git-with-a-vps

答案3

对我来说,我必须使用ssh://user@host:/mnt/foo/bar/my-project(注意:主机后面的,并.git在最后删除)。

因此我可以使用以下命令克隆一个存储库:

git clone ssh://user@host:/mnt/foo/bar/my-project

我们还可以注意到其格式就像使用scp命令一样。

答案4

如果你不想在服务器上手动创建存储库,你可以安装吉托西斯,这将使该过程自动化。但是您必须在服务器上执行一些过程来创建存储库——您无法通过客户端的 git ssh 连接来执行此操作。

相关内容