从私有git服务器克隆时,git子模块无法递归

时间:2019-01-13 13:06:30

标签: git server private git-submodules

这个问题已经被问了无数次,但总是与公共git服务器(例如github)结合使用。我正在设置自己的私有git服务器,似乎一切正常,直到尝试使用以前提交并推送的子模块克隆项目为止。

关于github询问此问题时,答案总是似乎是需要生成密钥对,并且需要向github注册公共密钥。我很乐意在我的私人git服务器上注册我的公钥,但是我找不到关于此的任何文档。可能吗甚至将git-scm.com漏斗中的文档都存储到github参考中。

我的私人git服务器只不过是一个带有外部硬盘驱动器的Raspberry Pi,运行Raspbian lite。我已经完成了三个项目,其中一个是主项目,另外两个作为子模块添加。我可以这样创建,提交和推送,但是当我尝试使用--recurse-submodules克隆它(或者先不进行子模块初始化/更新)时,子模块将失败。但是,我可以在主项目范围之外克隆子模块。

我一直在鬼混网络设置,而Pi更改了IP地址几次。因此,当我遇到问题时,我会设置一个指向路由器的DNS条目,并向路由器中的Pi添加端口转发规则,这样我就可以有效地从世界各地访问我的私有服务器。由于URL发生了变化,并且不想在某个地方留下旧URL,因此我只是再次启动了所有三个项目,但这对我没有帮助。

这是怎么回事?以下日志已匿名。 :)

更新1:克隆子模块时,身份验证出现问题。当克隆子模块作为主项目克隆的一部分时,/ var / log / auth.log显示失败的登录:

Jan 13 15:07:56 raspberrypi sshd[3148]: Failed password for git from 192.168.1.18 port 62855 ssh2

我这样做的场景不仅显示了错误,而且还成功地从主项目的上下文中克隆了子模块:

 E:\Projects>git clone --recurse-submodules ssh://git@git.domain.com/gitdata/Project1.git
Cloning into 'Project1'...
git@git.domain.com's password:
warning: You appear to have cloned an empty repository.

E:\Projects>cp -r Project1.cleanBU/* Project1

E:\Projects>cp -r Project1.cleanBU/.gitignore Project1

E:\Projects>git add Src .gitignore
fatal: not a git repository (or any of the parent directories): .git

E:\Projects>cd Project1

E:\Projects\Project1>git add Src .gitignore

E:\Projects\Project1>git commit
[master (root-commit) 1e52450] Initial commit
 1145 files changed, 726152 insertions(+)
 create mode 100644 .gitignore
...
<<<zapped!>>>
...
 create mode 100644 Src/build.bat

E:\Projects\Project1>git push
git@git.domain.com's password:
Enumerating objects: 550, done.
Counting objects: 100% (550/550), done.
Delta compression using up to 8 threads
Compressing objects: 100% (527/527), done.
Writing objects: 100% (550/550), 1.27 MiB | 3.21 MiB/s, done.
Total 550 (delta 272), reused 0 (delta 0)
remote: Resolving deltas: 100% (272/272), done.
To ssh://git.domain.com/gitdata/Project1.git
 * [new branch]      master -> master

E:\Projects\Project1>git submodule add ssh://git@git.domain.com/gitdata/project2.git Src/project2
Cloning into 'E:/Projects/Project1/Src/project2'...
git@git.domain.com's password:
remote: Counting objects: 202, done.
remote: Compressing objects: 100% (162/162), done.
remote: Total 202 (delta 36), reused 202 (delta 36)
Receiving objects: 100% (202/202), 586.16 KiB | 4.73 MiB/s, done.
Resolving deltas: 100% (36/36), done.

E:\Projects\Project1>git submodule add ssh://git@git.domain.com/gitdata/project3.git Src/project3
Cloning into 'E:/Projects/Project1/Src/project3'...
git@git.domain.com's password:
remote: Counting objects: 18, done.
remote: Compressing objects: 100% (18/18), done.
remote: Total 18 (delta 0), reused 0 (delta 0)Receiving objects:  44% (8/18)
Receiving objects: 100% (18/18), 15.94 KiB | 5.31 MiB/s, done.

E:\Projects\Project1>git add .gitmodules

E:\Projects\Project1>git commit
[master d93cfa4] Added project3 and project2 submodules
 3 files changed, 8 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 Src/project2
 create mode 160000 Src/project3

E:\Projects\Project1>git push
git@git.domain.com's password:
Enumerating objects: 6, done.
Counting objects: 100% (6/6), done.
Delta compression using up to 8 threads
Compressing objects: 100% (4/4), done.
Writing objects: 100% (4/4), 596 bytes | 596.00 KiB/s, done.
Total 4 (delta 0), reused 0 (delta 0)
To ssh://git.domain.com/gitdata/Project1.git
   1e52450..d93cfa4  master -> master

E:\Projects\Project1>cd ..

E:\Projects>rm -rf Project1

E:\Projects>git clone --recurse-submodules ssh://git@git.domain.com/gitdata/Project1.git
Cloning into 'Project1'...
git@git.domain.com's password:
remote: Counting objects: 554, done.
remote: Compressing objects: 100% (259/259), done.
remote: Total 554 (delta 273), reused 549 (delta 272)
Receiving objects: 100% (554/554), 1.27 MiB | 5.96 MiB/s, done.
Resolving deltas: 100% (273/273), done.
Submodule 'Src/project2' (ssh://git@git.domain.com/gitdata/project2.git) registered for path 'Src/project2'
Submodule 'Src/project3' (ssh://git@git.domain.com/gitdata/project3.git) registered for path 'Src/project3'
Cloning into 'E:/Projects/Project1/Src/project2'...
Permission denied, please try again.
Permission denied, please try again.
git@git.domain.com: Permission denied (publickey,password).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
fatal: clone of 'ssh://git@git.domain.com/gitdata/project2.git' into submodule path 'E:/Projects/Project1/Src/project2' failed
Failed to clone 'Src/project2'. Retry scheduled
Cloning into 'E:/Projects/Project1/Src/project2'...
Permission denied, please try again.
Permission denied, please try again.
git@git.domain.com: Permission denied (publickey,password).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
fatal: clone of 'ssh://git@git.domain.com/gitdata/project2.git' into submodule path 'E:/Projects/Project1/Src/project2' failed
Failed to clone 'Src/project2' a second time, aborting
Cloning into 'E:/Projects/Project1/Src/project3'...
Permission denied, please try again.
Permission denied, please try again.
git@git.domain.com: Permission denied (publickey,password).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
fatal: clone of 'ssh://git@git.domain.com/gitdata/project3.git' into submodule path 'E:/Projects/Project1/Src/project3' failed
Failed to clone 'Src/project3'. Retry scheduled
Cloning into 'E:/Projects/Project1/Src/project3'...
Permission denied, please try again.
Permission denied, please try again.
git@git.domain.com: Permission denied (publickey,password).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
fatal: clone of 'ssh://git@git.domain.com/gitdata/project3.git' into submodule path 'E:/Projects/Project1/Src/project3' failed
Failed to clone 'Src/project3' a second time, aborting

E:\Anheko\Projecten>git clone ssh://git@git.domain.com/gitdata/project2.git
Cloning into 'project2'...
git@git.domain.com's password:
remote: Counting objects: 18, done.
remote: Compressing objects: 100% (18/18), done.
Rremote: Total 18 (delta 0), reused 0 (delta 0)eceiving objects:  44% (8/18)
Receiving objects: 100% (18/18), 15.94 KiB | 5.31 MiB/s, done.

1 个答案:

答案 0 :(得分:2)

  

也许使用git守护程序或http(s)可行?要尝试git daemon

git daemon has no authentication,因此不会询问密码,这意味着访问服务器的每个人都可以克隆存储库。

  

我不希望每个人都能够克隆我的存储库和2:我不确定如何设置它,因为您不需要密码。

如果您的服务器依赖SSH,则需要将您的公钥(~/.ssh/id_rsa.pub)发布到git@yourserver:~git/.ssh/authorized_keys:任何克隆都不需要您输入任何密码(假设您不需要私钥)密码保护)

ssh-copy-id git@yourserver

如果您的服务器使用的是https服务器,则需要通过Git credential storage(例如,在Windows客户端上为using the Microsoft GCM)来缓存凭据(用户名/密码)