我有一个项目,我创建了一个git存储库:

$ cd myproject  
$ git init  
$ git add .  
$ git commit  

我想在另一台机器上创建一个裸克隆:

$ cd ..  
$ git clone --bare myproject  ssh://user@server:/GitRepos/myproject.git  

我执行了克隆,但没有打印任何答案。 我登录到服务器上,试图查看文件是如何存储的。路径/GitRepos是空的,所以我决定再次克隆:

$ git clone --bare myproject  ssh://user@server:/GitRepos/myproject.git

这一次的答案是:

ssh://user@server:/GitRepos/myproject。Git目录已经存在,并且不是空目录。

但我看到小路上空无一人。 这是怎么回事?


首先,我的GIT技能有点欠缺。

这将在您的机器上克隆一个裸存储库,其中只包含.git中的文件夹,这是一个隐藏目录。执行ls -al,您应该会在存储库中看到.git或CD .git。


您需要在您调用的服务器上运行clone命令。但是我打赌你没有在你的本地客户端上运行ssh服务器,所以不管怎样这都行不通。建议你遵循这个方法(检查手册,因为我是凭记忆这么做的)

登录到服务器机器。 使用git init——bare创建一个裸回购 在客户端机器上,您可以将回购推到服务器。git远程添加source ssh://user@server:/GitRepos/myproject。Git后面跟着Git push origin master


这可能与问题直接无关;但是我犯了一个错误,我在OP中看到,是URL规范ssh://user@server:/GitRepos/myproject。Git -也就是说,它后面有冒号:和正斜杠/,表示绝对路径。

然后我发现Git克隆,ssh:无法解析主机名- Git,开发- Nicolas Kuttler(因为这是我在Git版本1.7.9.5上得到的错误),并指出:

我最初使用的命令的问题是,我试图使用类似scp的语法。

... 这也是我的问题!在git和ssh中,你要么使用

ssh://username@host.xz/absolute/path/to/repo.git/ -只是服务器上绝对路径的正斜杠 username@host.xz:relative/path/to/repo.git/ -只是一个冒号(它不能有ssh://作为服务器上的相对路径(相对于服务器机器上用户名的home目录)


我想尝试一个包括git流程和三个“点”或用例的答案,git中央存储库,本地开发和生产机。这一点没有经过很好的测试。

我给出了非常具体的命令。而不是<your folder>,我将写入/root/git.我更改原始命令的唯一地方是用example.com替换我的特定服务器名。我将解释文件夹的用途,以便您可以相应地调整它。请让我知道任何困惑,我会更新答案。

服务器端的git版本为1.7.1。服务器为CentOS 6.3 (Final)。

开发机上的git版本为1.8.1.1。这是Mac OS X 10.8.4。

中央存储库和生产机器在同一台机器上。

SVN用户可以将中央存储库关联为“服务器”,配置如下。我有一个文件夹/root/git,我保存所有的git存储库。我想为一个项目创建一个git存储库,我称之为“花”。

cd /root/git
git clone --bare flowers flowers.git

git命令给出了两条消息:

Initialized empty Git repository in /root/git/flowers.git/
warning: You appear to have cloned an empty repository.

没什么好担心的。

在开发机器上的配置如下。我有一个文件夹/home/kinjal/Sites,我把所有的项目放在那里。现在我想获取中央git存储库。

cd /home/kinjal/Sites
git clone root@example.net:/root/git/flowers.git

这让我可以开始往里面添加东西。我首先设置git流

git flow init -d

默认情况下,这是在分支develop上。现在我在这里添加代码。然后我需要提交到中央git存储库。

git add .
git commit -am 'initial'
git push

在这一点上,它被推送到开发分支。我还想把这个添加到主分支。

git flow release start v0.0.0 develop
git flow release finish v0.0.0
git push

请注意,在发布开始和发布结束之间我什么都没有做。当我完成发布时,我被提示编辑两个文件。这推动了开发分支的掌握。

在生产站点(与我的中央git存储库位于同一台机器上)上,我希望将存储库放在/var/www/vhosts/example.net中。我已经有了/var/www/vhosts.

cd /var/www/vhosts
git clone file:///root/git/flowers.git example.net

如果生产机器也位于另一台机器上,那么git克隆命令将与开发机器上使用的命令类似。


围棋 101:

Git是一个去中心化的版本控制系统。你不需要服务器来启动和运行git。你可能还是想这么做,因为它看起来很酷,对吧?(如果你想在多台电脑上处理一个项目,它也很有用。)

所以要让“服务器”运行,你需要运行git init——bare <your_project>。Git会创建一个空的存储库,然后你可以将它导入到你的机器上,而不必在. Git目录下的配置文件中瞎折腾。

After this you could clone the repo on your clients as it is supposed to work, but I found that some clients (namely git-gui) will fail to clone a repo that is completely empty. To work around this you need to run cd <your_project>.git && touch <some_random_file> && git add <some_random_file> && git commit && git push origin master. (Note that you might need to configure your username and email for that machine's git if you hadn't done so in the past. The actual commands to run will be in the error message you get so I'll just omit them.)

因此,在这一点上,你可以简单地运行git clone <user>@<server>:<relative_path><your_project>.git将存储库克隆到任何机器。(正如其他人指出的那样,如果使用绝对路径,可能需要在它前面加上ssh://。)这假设您已经可以从客户端登录到服务器。(如果你想把很多东西推送到远程服务器上,你还可以为ssh设置配置文件和密钥。)

相关链接: 这基本上告诉了你你需要知道的。 这是为那些知道git的基本工作原理但有时忘记确切语法的人准备的。


对于GitHub上的存储库,请尝试:

git clone ssh://git@github.com/<user>/<repository name>.git

通过ssh设置git克隆参见:

生成SSH密钥并在“帐户设置-> SSH密钥”中添加生成的密钥 SSH克隆


免责声明:这只是bobbaluba评论的副本,以便将来的访问者更容易看到。这比其他任何答案都更有用。


以git clone为例,必须去掉ssh://前缀

git clone git@github.com:owner/repo.git

我说: “/GITREPOSITORIES/RepoA”“ssh://luc@EERSTENASDS119J/volume1/RepoA” 结果: fatal:目标路径“ssh://luc@EERSTENASDS119J/volume1/RepoA”已经存在,并且不是空目录。

系统在当前路径下创建了一个目录ssh://luc@EERSTENASDS119J/volume1/RepoA。

所以git克隆没有解释URL规范。 使用亚历克的变通方法。


git克隆服务器:Example/ project .git


做这个问题很简单 试试这个。

步骤1:

ls -al ~/.ssh

步骤2:

ssh-keygen 

(使用enter键作为默认值) 步骤3:设置配置文件

vim /c/Users/Willie/.ssh/config

主机gitlab。com 主机gitlab。com git用户 IdentityFile ~ / . ssh / id_rsa

步骤4:

git clone git@gitlab.com:<username>/test2.git

步骤5: 当你完成第四步的时候 1.test2。Git文件将下载完成 2.您将在~/.ssh中获得新文件(known_hosts)

PS:我创建了id_rsa和id_rsa。并将其交付到Gitlab服务器。在任何客户端(windows和Linux)使用这两个密钥。