【发布时间】:2013-04-15 15:37:24
【问题描述】:
我的虚拟主机在他们基于 Linux(我相信是 Debian)的虚拟主机服务器上安装了 Git 作为“客户端”,而不是作为“服务器”。
有没有办法通过我的 Windows 7 台式计算机使用 GitGUI 连接到我的 Web 主机的 Git 安装?
【问题讨论】:
我的虚拟主机在他们基于 Linux(我相信是 Debian)的虚拟主机服务器上安装了 Git 作为“客户端”,而不是作为“服务器”。
有没有办法通过我的 Windows 7 台式计算机使用 GitGUI 连接到我的 Web 主机的 Git 安装?
【问题讨论】:
“客户端”和“服务器”Git 安装之间几乎没有区别:Git 只提供了一个能够自行为 Git 存储库提供服务的程序 — git-daemon。由于它不提供身份验证,它通常只安装在为可公开访问的存储库提供服务的机器上(使用免费的只读git:// 协议)。
对 Git 存储库的所有“常规”写访问都介导由其他软件 - 通常是 HTTP[S] 服务器(用于http:// 协议)或SSH 服务器(用于ssh:// 协议)。该软件执行必要的身份验证和授权,然后调用低级 Git 程序进行客户端/服务器数据交换。
因此,您应该首先决定如何访问您的存储库。
在您的情况下,我会选择 SSH:由于您的 Web 主机(据说)是一个基于 Linux 的 VPS,它很可能已经启动并运行了 SSH 服务器,并且您应该为此获得一个帐户(如果没有,有时间再问)。
故事的其余部分解释here(带有漂亮的图片)。对您来说唯一的区别是,由于您不会使用 github,因此您必须手动将您的公共 SSH 密钥传输到您的 VPS 主机。
更多关于在服务器上托管 Git 的信息,通常是 is available in The Book(this 是关于 Git 中改进的 HTTP[S] 支持的后期附录)。
更新在 Git 中使用 SSH。
事实上,托管通过 SSH 访问的 Git 存储库可能既简单又复杂,具体取决于您的设置 — 简单的解决方案或具有虚拟化 Git 用户和访问权限管理等的高端服务器。
使用 SSH,Git 以这种方式工作:
为了让我们更进一步,还有两个必须掌握的技巧:
虽然 SSH 支持多种“服务”(例如,SFTP — 一种安全版本的 FTP,并制作普通 TCP 隧道),但它最常见的用例是远程启动进程,在最常见的情况下它是shell(这就是为什么它毕竟被命名为 SSH - 一个安全的 SHell)。
当这样一个远程进程启动时,它会使用登录用户的凭据。因此,当您 登录到 SSH 服务器时——“手动”或 Git 为你完成此操作——在远程服务器上启动一个 shell,它使用 remote 您作为身份验证的用户。
在尝试访问远程存储库之前,Git 客户端会解析该存储库的 URL。血淋淋的细节在git-fetch manual 中,但简单的事情是这样的 URL
ssh://user@server/path/to/the/repo.git
分解为协议部分,用户,服务器和存储库的路径,即
/path/to/the/repo.git
此存储库路径是服务器上的物理路径。所以是的,就是这么简单:你不必调整某种配置文件来告诉 Git 存储库在哪里,相反,你只需在你的 URL 中指定它。
存储库路径处理的一个更高级的转折是可以使用特殊的快捷方式来引用远程用户的主目录。这是使用路径完成的,例如
/~/devel/repo.git
这使得 Git 在远程用户的主目录下查找名为“devel”的目录,然后在其中查找“repo.git”目录。如果您不想留出一个特殊的目录来保存 Git 存储库,这种方法很有用。这种方法也非常适合单人项目。
在典型的基于 Linux 的操作系统上,用户的主目录位于 /home 层次结构下,因此用户 johndoe 将 /home/johndoe 作为其主目录。通过 SSH 以交互方式登录后,您可以通过以下方式验证您的主目录是什么
cd
pwd
(第一个命令将当前目录更改为主目录,第二个命令打印当前目录)。
所以,对于最简单的情况,您可以这样做:
通过 SSH 登录服务器。
在某处创建服务器端存储库:
cd /var/tmp
mkdir test.git
cd test.git
git init --bare
退出。
将此远程添加到您的本地存储库:
git remote add test ssh://user@server/var/tmp/test.git
使用这个遥控器:
git push test master
要验证 Git 在服务器上是否正常工作,只需尝试类似
ssh user@server "git --version"
或
plink user@server "git --version"
如果您使用的是 PuTTY 而不是 Git for Windows 随附的 OpenSSH 客户端。
【讨论】:
gitolite 代替(该项目不是休眠的,部署在一些引人注目的地方,该作者在Git list),和 b) 我打算尝试让 Kobus 真正了解涉及 SSH 时幕后发生的事情。
git gui 要求物理路径——我认为你不正确,因为它要求一个 Git URL,所以你应该弄清楚你应该使用哪个 URL,然后将其提供给git gui。或者只是使用 Git 命令添加一个命名远程(正如我在回答中显示的那样),git gui 将自动选择你的新命名远程(因为它使用相同的存储库设置)。