我正在尝试使用 SSH 访问远程 git 存储库,但出现了致命错误 - 我的语法有问题吗?
我在服务器上的 mysite 文件夹中创建了一个 git repo - 因此该 repo 位于 /home/mysite/.git
git clone ssh://root@serverIP/mysite/.git
fatal: could not create work tree dir 'mysite'.: Permission denied
有人能看出我的语法有什么问题吗?或者这里还有其他问题吗?
答案1
尝试使用目标目录的完整路径。例如:
git clone ssh://root@serverIP/mysite/.git /home/user_name/mysite
更新:
当 git 克隆 repo 时,它会根据 repo 的名称为其创建目录。
git clone [email protected]:username/repo.git
Git 将创建目录repo
。但是您的例子中没有 repo 名称mysite/.git
。
答案2
你必须向 ssh 提供你的 repo 的完整路径,而 .git 部分是不必要的,git 可以自行解决这个问题:
git clone ssh://root@serverIP/home/mysite
已编辑:使用 URL 类型 ssh:// 语法时,我之前使用的冒号无效。还有另一种语法(ssh 样式),需要它:
git clone root@serverIP:/home/mysite
我通常更喜欢第二种形式。
答案3
有效的 ssh URL 应该是这样的ssh://{user}@host.xz/path/to/repo.git
,所以你应该没问题(如果(mysite/.git
是有效路径)。
问题应该出在本地:您是否对当前目录具有写权限?
一旦获得写权限,您仍然会收到两条消息:
stdin: is not a tty
:这意味着你的 .bashrc 或全局 .bashrc 中的某些内容正在等待输入:请参阅響球例如:
mesg y
全局 .bashrc 文件里面有一行 ( ),与 GIT 交互时会导致重复出现消息 (stdin: is not a tty
)
这并不能阻止克隆。
warning: You appear to have cloned an empty repository
:该警告与前一条消息无关,并且如果您克隆的 repo 确实是空的,则该警告应该是准确的。
答案4
对我来说,问题是目录的写访问权限,我使用“sudo”修复了它。我必须在我的 bash 配置文件中创建一个别名,在 git 命令之前缩写 sudo 命令。
下面是我添加到 .profile 文件中的行,效果很好。我不再收到“致命错误:无法创建工作树目录...”消息。
alias sgit="sudo /usr/local/git/bin/git"
更新
我说得太早了。这样做会导致我的 Mac 上的程序在目录中保存文件时出现其他问题,因为该目录归 root 所有。我不得不将根目录更改为我的用户帐户(也是管理员)。这反过来又使我的别名“sudo git”变得毫无用处,因为我现在可以直接使用 git 而无需 sudo。希望这对某些人有帮助。