从Bash脚本中克隆Git源代码

14

我正在尝试使用脚本自动化我的Git操作,但遇到了以下问题。

这个命令可以在命令行中使用:

git clone git@github.xxxx.com:blablabla/reponame.git /Users/myname/dev/myfolder

现在我想从我的脚本中做同样的事情。我有以下内容:

#/bin/bash

repository="git@github.xxxx.com:blablabla/reponame.git"

localFolder="/Users/myname/dev/myfolder"

git clone $repository" "$localFolder

这个错误是:“GitHub SSH访问暂时不可用(0x09)。fatal:远程终端意外挂断。”

如果有任何线索,请不吝赐教。


6
你的意思是希望使用 git clone "$repository" "$localFolder" 命令,对吗?否则,你要求将两个变量的内容进行字符串分割和通配符扩展,然后将从前者分割的最右边的参数和从后者分割的最左边的参数合并为一个参数,并在它们之间加上一个空格...这似乎是一件非常愚蠢的事情。 - Charles Duffy
1
是的,我在做那件傻事。非常感谢! - agatha
@CharlesDuffy:我认为你应该把它作为一个答案添加进去,这样在搜索中就不会出现未回答的问题等情况。 - Mark Longair
@MarkLongair,我认为关闭这个问题比较合理——这不太可能对其他人有帮助——但似乎没有其他人和我持相同观点。 - Charles Duffy
我不知道 $a" "$b 会做什么,所以即使问题很简单,答案也有价值。 - eventi
2个回答

24

你是指 git clone "$repository" "$localFolder" 对吧?

运行 git clone $repository" "$localFolder 是完全不同的事情:

  • 因为两个变量都没有放在双引号里,它们的内容会被分割成字符串并进行通配符扩展;因此,如果它们包含空格(通常是 $IFS 中的字符),它们可能会变成多个参数,如果它们包含通配符(*[...]等),那么这些参数可能会被替换为文件名(或者如果启用了 nullglob shell 选项,则从生成的参数列表中移除)
  • 因为空格在两个参数之间被引用,所以它们被合并成一个单一的参数,然后传递给 git

因此,对于你提供的值,该脚本运行的内容将是:

git clone "git@github.xxxx.com:blablabla/reponame.git /Users/myname/dev/myfolder"

...这与之相当不同

git clone git@github.xxxx.com:blablabla/reponame.git /Users/myname/dev/myfolder

...因为它在URL中显示了/Users/myname/dev/myfolder路径。


0

在我的情况下,我遇到了同样的问题,我想将所有的GitHub存储库(包括所有分支)克隆到一个文件夹中以进行备份。我创建了一个python脚本来完成这个任务,可以在这里找到:https://github.com/tisma95/github-clone,你可以尝试使用它。

谢谢


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