如何解决使用 update-index
我一直试图破译 git-filter-branch
命令使用 here 重写索引,以便所有 repo 内容都在一个新目录中,然后用于将其移动到另一个回购。专注于具体命令:
git filter-branch --index-filter '
git ls-files -s |
sed "s,\t,&'"$dir"'/," |
GIT_INDEX_FILE="$GIT_INDEX_FILE.new" git update-index --index-info &&
mv "$GIT_INDEX_FILE.new" "$GIT_INDEX_FILE"
' HEAD
这实质上似乎将索引从 /folder1/path/to/file
更改为 'newrootfolder'/folder1/path/to/file
。
问题:
解决方法
GIT_INDEX_FILE
是 repository environment variables
索引文件的路径(仅限非裸仓库)。
该过滤器命令和示例是 introduced in June 2007,带有 this patch
GIT_INDEX_FILE="$GIT_INDEX_FILE.new" git update-index --index-info
这部分强制 git 重新创建一个新的索引文件,其中包含重命名的文件夹。
mv "$GIT_INDEX_FILE.new" "$GIT_INDEX_FILE"
新索引一旦创建,就可以替换旧索引。
请注意当前的选项(在 python 中,所以跨平台)是使用 git filter-repo
,它取代了 old obsolete git filter-branch
or BFG
git filter-repo --path <olddirectory>/ --path-rename <olddirectory>/:<newdirectory>/
示例:
如果你想重命名两个目录(如果两个目录都重命名到相同的位置,可能会合并),使用 --path-rename
;例如,将 cmds/
和 src/scripts/
重命名为 tools/
:
git filter-repo --path-rename cmds:tools --path-rename src/scripts/:tools/
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。