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

时间:2010-07-30 07:53:42

标签: git

我尝试使用这个问题Combining multiple git repositories中涉及git-filterbranch的答案但遇到了麻烦,因为当存储库名称在其名称中有空格时,这个答案似乎不起作用。

例如,如果存储库被称为“我的数字”而不是“数字”,这将无效。

我正在运行msysgit。

以下是一个示例,其中包含“我的数据”存储库,其中包含了令人费解的信息:

/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,工作正常:

/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-branch调用以支持其中有空格的存储库名称?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

我认为引用你传递给git update-index的文件名应该足够了:

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

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