gpt4 book ai didi

git - 将 git 存储库 merge 到子目录中时出错

转载 作者:太空狗 更新时间:2023-10-29 12:57:37 31 4
gpt4 key购买 nike

我已经查看了几个解决此问题的线程。

Combining multiple git repositories

Combining multiple git repositories having a space in their name

我还查看了 git filter-branch 联机帮助页。


更新

我已更改为 2 脚本系统:

#!/bin/bash
git filter-branch --index-filter '~/doit.sh' HEAD

和doit.sh

#!/bin/bash
git ls-files -s | \
sed "s-\t-&data/perl_modules/-" | \
GIT_INDEX_FILE="$GIT_INDEX_FILE.new" git update-index --index-info && \
mv "$GIT_INDEX_FILE.new" "$GIT_INDEX_FILE"

这避免了之前的错误,但现在得到了这个(用 [...] 替换了路径):

Rewrite c35e4ef0626fb2045f57fa5b605e7663b8d06196 (1/10977)mv: cannot stat `[...]/.git-rewrite/t/../index.new': No such file or directory
index filter failed: ~/doit.sh

当我运行

ls-files- s | sed ... | git update-index ...

我得到了它应该生成的索引文件。同样,当我更改 doit.sh 文件以输出 sed 的结果而不是将其通过管道传输到 git update-index 时,它似乎产生了正确的输出......似乎 git update-index 在运行时根本没有创建文件--索引过滤器....


再次更新:

当我改变

mv "$GIT_INDEX_FILE.new""$GIT_INDEX_FILE"

mv "$GIT_INDEX_FILE.new""$GIT_INDEX_FILE"||是的

第一个 mv 失败,但所有其他(到目前为止)都在工作。


所有这一切都在这个脚本中达到了顶峰:

git filter-branch --index-filter \
'git ls-files -s | sed "s-\t\"*-&data/perl_modules/-" |
GIT_INDEX_FILE=$GIT_INDEX_FILE.new \
git update-index --index-info &&
mv $GIT_INDEX_FILE.new $GIT_INDEX_FILE' HEAD

理论上,这个脚本应该获取存储库中的所有文件,将它们推送到 data/perl_modules/,并重写历史记录,使文件看起来一直在该目录中。

但是我得到这个错误:

fatal: ambiguous argument 'ls-files': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions

不确定如何继续,我对脚本的理解不够好,无法对其进行调试,它直接取自 git filter-branch 联机帮助页。

我在手动将文件移动到子目录之前和之后都尝试过此操作,以防需要移动或不移动文件。

最佳答案

有几个问题。

1) git filter-branch --index 过滤器没有正确使用“...”。

我不确定这是为什么,git-filter 的错误,环境问题?谁知道。但是我能够通过将所有内容从“...”中移出并将其放入脚本文件中来修复它。然后我调用了 '' 中的脚本

git filter-branch --index-filter '~/doit.sh' HEAD

还有 doit.sh:

#!/bin/bash

git ls-files -s | \
sed "s-\t-&data/perl_modules/-" | \
GIT_INDEX_FILE="$GIT_INDEX_FILE.new" git update-index --index-info

mv "$GIT_INDEX_FILE.new" "$GIT_INDEX_FILE" || true

2)第一次提交是空的,所以没有index.new到mv

这个 git repo 是使用 git-svn 从 svn 导入的。因此,第一次提交完全是空的,只是说初始 svn repo 初始化。因此,没有文件被移动,也没有 index.new 被移动。这是通过添加 || 解决的对 mv 命令是正确的。但是请注意,如果不止一个 mv 命令失败,您还会遇到其他问题。

关于git - 将 git 存储库 merge 到子目录中时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7798142/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com