我有一个名为 my-project 的文件夹,里面我做了git init,git 提交 -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 连接来执行此操作。