msysgit问题

7
我好像在安装msysgit时遇到了一些问题。我可以通过putty连接到我的SSH目录,使用:
ssh://user@host:port,并且我有正确的密钥。我也可以通过plink使用以下命令: plink -P PORT user@host -i /path/to/private_key.ppk
但是,当我尝试通过TortiseGIT或git bash运行以下命令:
git clone ssh://user@host:port/path/to/myapp.git
却一直出现以下错误:
Initialized empty Git repository in D:/Git/myapp.git warning: You appear to have cloned an empty repository. fatal: The remote end hung up unexpectedly
我已经检查过/Git/setup.ini和TortiseGIT,两者都使用:
C:\Program Files\TortoiseSVN\bin\TortoisePlink.exe 请问有谁知道如何解决这个问题?这让我很烦恼!
4个回答

9

以下是一个简单的检查列表:

  1. 你要连接的服务器上是否启用了ssh?
  2. 服务器上是否安装了GIT?
  3. 你在服务器上是否设置了Git仓库?
  4. 仓库是否具有正确的权限并且在服务器配置中启用了sharedrepository?
  5. 你是否将ssh密钥放置在适当的位置以供GIT使用?

    建议:

1:由于你可以使用putty进行连接,看起来ssh已经设置好了。

2:使用putty连接到服务器。输入 git --version ,你会得到一个合理的响应吗?如果没有,则需要在服务器上安装它。

3:尝试在服务器上设置一个新的仓库。假设它是*nix风格的服务器,请使用putty并连接到服务器,并使用以下命令创建一个新的仓库,假设你有一个目录/home/source_code。echo行只是创建一个带有一些文本的文件,以便我们有一些东西可以开始使用。

cd /home/source_code
mkdir test_repo
cd /home/source_code/test_repo
echo "first file" > t.txt
git init
git add .
git commit -m "Initial Import"

现在我们有一个包含一个t.txt文件的仓库。通常情况下,您不应该将更改推送到包含工作副本更改的仓库中。服务器上拥有仓库的目的是让人们随时可以将其推入其中。我们创建了一个“裸”的克隆,它只是git数据库,这样就没有任何工作副本更改的可能性。正是这个“裸”的克隆将被用作中央git仓库。

cd /home/source_code
git clone --bare test_repo/ test_repo.git

现在您可以摆脱我们设置的临时存储库。

cd /home/source_code/
rm -rf test_repo

在您的本地计算机上,再次尝试克隆。
git clone ssh://user@host.com:port/home/source_code/test_repo.git

4: 权限:这不应该对克隆、获取或拉取造成问题,除非您选择的存储库位置没有读取权限。如果在推回时出现“Permission denied”错误,请参考权限更正

5: 为GIT设置公钥/私钥:

  1. 使用putty连接服务器
  2. 在您的~/.ssh文件夹上设置权限:chmod 700 .ssh
  3. 在您的~/.ssh/authorized_keys文件上设置权限:chmod 600 authorized_keys
  4. 生成密钥:ssh-keygen -t dsa
  5. 接受它想要使用的文件名
  6. 不输入密码(只需输入)。稍后您将希望重新设置密码。
  7. 将pub密钥添加到authorized_keys文件中:cat id_dsa.pub >> .ssh/authorized_keys
  8. 编辑/etc/ssh/ssh_config并添加行PubkeyAuthentication yes
  9. 重启ssh守护进程:sudo /etc/init.d/ssh restart
  10. 从服务器将id_dsa和id_dsa.pub复制到本地硬盘驱动器(使用winscp或sftp或其他类似工具)c:\users\userName\.ssh目录(对于vista,其他版本的windows位置会略有不同)
  11. 将tortoise git设置为指向C:\Program Files\Git\bin\ssh.exe(而不是putty)

命令行git和tortoise git都应该已经设置好了。在本地机器上尝试再次克隆。

git clone ssh://user@host.com:port/home/source_code/test_repo.git

您可能现在想要重复设置带有密码短语的密钥....


1

您需要安装Pageant并将密钥添加到其中。

还要仔细检查您的GIT_SSH环境变量是否设置为使用plink。


嘿,感谢回复 - 是的,我正在运行Pageant,并且已经将密钥加载到其中。GIT_SSH环境变量(通过/Git/setup.ini)设置为上述路径。 - Nick
即使我运行git push ssh://user@host:port/path/to/myapp.git,我仍然只会得到“fatal: the remote end hung up unexpectedly”。 - Nick
有没有办法在“GIT”中进行调试?例如跟踪或其他方式?如何将其输出? - Nick

0

远程仓库中是否有任何内容(即至少一个提交)?

Git提示:“警告:您似乎克隆了一个空的存储库”

当您想要将内容推送到空的远程仓库时,您必须使用以下命令:

git push URL master

谢谢你的回复。是的,我不确定那是否是问题,因为即使在我推送时仍然出现错误。如何“调试”git或plink?你有什么想法吗? - Nick
嗯...你不确定这是问题吗?我以为你不能推送到那个仓库?(请参见对nolim1t答案的评论) - Stefan Näwe
你可以尝试设置GIT_TRACE=1和'git ls-remote Your-URL'。 - Stefan Näwe
通过我的电脑->属性(我不记得哪个选项卡,因为我现在面前没有Windows机器),但是有一个名为环境变量的按钮。这样你就可以查看和设置Windows中的任何变量。 - nolim1t
1
你只需要在msysgit bash中执行'export GIT_TRACE=1 ; git ...'即可,无需将该设置永久化。 - Stefan Näwe

0

你尝试过使用ssh user@host:port从Git-Bash连接吗?它是直接连接还是要求输入密码?

如果你使用的是ssh的标准端口22,则不需要指定端口,否则需要指定非标准端口。确保你可以从git bash连接成功,因为它通常有自己的密钥存储在用户目录下的.ssh目录中。如果你无法从Git-Bash连接成功,你需要修复密钥或调试问题,尝试使用以下命令指定密钥:

ssh -i keyfile user@host:port

如果这样做仍然无法连接或提示你在远程机器上输入密码,那么说明密钥交换没有正常工作。因此,你需要检查密钥是否在Git-Bash环境中正确设置。特别是要确保已导出RSA密钥,而不仅仅是使用ppk密钥与Git-Bash。我不使用Tortoise-Git,所以无法提供帮助,但我经常使用Git Bash。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接