如何从GIT存储库历史记录中删除路径带有冒号的所有文件:在文件名中?

2ul0zpep  于 2023-01-15  发布在  Git
关注(0)|答案(3)|浏览(196)

我在Debian 10 Linux的GIT存储库中存储了带有冒号的ISCSI节点文件名。
示例:

'iscsi/nodes/iqn.2000-01.com.synology:NAS01-DS916.nas/ff11::111:11ff:ff1f:1ff1,3260,1/default'
'iscsi/send_targets/1.2.3.4,3260/iqn.2000-01.com.synology:NAS01-DS916.nas,ff11::111:11ff:ff1f:1ff1,3260,1,default'

但在Windows上 checkout 失败,因为冒号是Windows文件名中的无效字符。
我在Windows checkout 时收到以下GIT错误:

error: invalid path 'iscsi/nodes/iqn.2000-01.com.synology:NAS01-DS916.nas/ff11::111:11ff:ff1f:1ff1,3260,1/default'
...
error: invalid path 'iscsi/send_targets/1.2.3.4,3260/iqn.2000-01.com.synology:NAS01-DS916.nas,ff11::111:11ff:ff1f:1ff1,3260,1,default'
    • 1)如何列出所有带冒号的路径:完整GIT回购历史记录?**
    • 2)如何从GIT存储库历史记录中删除路径至少包含一个冒号的所有文件:在文件名中?**
vngu2lb8

vngu2lb81#

更好的方法可能是不要在Windows中 checkout 这些文件,查看稀疏 checkout 工具,或者使用Windows可以处理的字符重命名它们,而是回答所提出的问题:
1.如何列出所有带冒号的路径:完整的GIT回购历史记录吗

git log --all --name-only -m --pretty= -- '*:*' | sort -u

1.如何从GIT存储库历史记录中删除路径至少包含一个冒号的所有文件:在文件名中?

git filter-branch --prune-empty --index-filter '
        git ls-files "*:*" | git update-index --remove --stdin
' -- --all

这将重写 * 你的整个历史 * 从你必须改变的第一个提交开始。在一个临时克隆中做这个。

y53ybaqx

y53ybaqx2#

1.如何列出所有带冒号的路径:完整的GIT回购历史记录吗
你可能不太走运。Windows here中有更多关于此问题和解决方法的讨论。
1.如何从GIT存储库历史记录中删除路径至少包含一个冒号的所有文件:在文件名中?
如果你是和别人一起开发的话,请小心使用这种方法。当在原点修改现有的分支时,别人试图把它们拉下来时会引起很多冲突。
但是如果您可以继续,可以尝试here方法。

zrfyljdw

zrfyljdw3#

链接#1未提供解决方案以列出具有colo的路径
检查:

git ls-tree -r master --name-only | grep ":"

但建议的方法是重置所有不带":"的文件,并删除其余的:

git ls-tree -r master --name-only | grep -v ":" | xargs git reset HEAD
git commit -m "deleting all files with a colon in the name"
git restore -- .

相关问题