组合多个git存储库,名称中包含空格


Combining multiple git repositories having a space in their name

我尝试使用这个问题的答案来调用git filterbranch组合多个git存储库,但遇到了麻烦,因为当存储库名称中有空间时,这个答案似乎不起作用。

例如,如果将存储库称为"我的数字"而不是"数字",那么这将不起作用。

我在运行msysgit。

下面是一个例子,有一个"我的数字"存储库,wich失败了:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/d/git/my figures (master)
$ git filter-branch --index-filter \
> 'git ls-files -s | sed"s-\t-&my figures/-" |
> GIT_INDEX_FILE=$GIT_INDEX_FILE.new \
> git update-index --index-info &&
> mv $GIT_INDEX_FILE.new $GIT_INDEX_FILE' HEAD
Rewrite d9f3a10522f2a0e1531f45e8e7b3a518f0d714c5 (1/1)mv: when moving multiple files, last argument must be a directory
Try `mv --help' for more information.
index filter failed: git ls-files -s | sed"s-\t-&my figures/-" |
GIT_INDEX_FILE=$GIT_INDEX_FILE.new \
git update-index --index-info &&
mv $GIT_INDEX_FILE.new $GIT_INDEX_FILE
rm: cannot remove `d:/git/my figures/.git-rewrite/revs': Permission denied
rm: cannot remove directory `d:/git/my figures/.git-rewrite': Directory not empty

用存储库重新命名为myfigures,wich工作正常:

1
2
3
4
5
6
7
/d/git/myfigures (master)
$ git filter-branch --index-filter 'git ls-files -s | sed"s-\t-&myfigures/-" |
GIT_INDEX_FILE=$GIT_INDEX_FILE.new \
git update-index --index-info &&
mv $GIT_INDEX_FILE.new $GIT_INDEX_FILE' HEAD
Rewrite d9f3a10522f2a0e1531f45e8e7b3a518f0d714c5 (1/1)
Ref 'refs/heads/master' was rewritten

那么,如何调整这个git filter分支调用来支持存储库名称中有空间呢?


我最后在git邮件列表上问了一个问题:其中一个成员给出了一个答案:一些引号应该添加到mv子命令中,它们已经更新了文档:请参阅http://git-scm.com/docs/git-filter-branch上的最后一个示例


我相信引用您传递到git update index的文件名就足够了:

1
... | sed"s-\t-&"my figures"-" | ...

当然,如果您将过滤器放在自己的文件中,引用/转义会简单一点——这不会被单引号包围。