相关疑难解决方法(0)

重命名git存储库中所有提交的文件

我想重命名git存储库中所有提交的文件,这是我尝试过的:

git filter-branch --index-filter 'git mv -k <old name> <new name>' HEAD
Run Code Online (Sandbox Code Playgroud)

此命令遍历了存储库中的所有提交,但最终得到了消息

警告:参考'refs/heads/master'保持不变

这意味着没有任何改变.这里出了什么问题?

请注意,这是我想重命名不存在从第一次提交的文件,因此,如果我不使用-kgit mv,我的意思是,如果我使用:

git filter-branch --index-filter 'git mv <old name> <new name>' HEAD`
Run Code Online (Sandbox Code Playgroud)

尝试第一次提交时,Git会出错,说"糟糕的源......".

git

21
推荐指数
2
解决办法
4255
查看次数

使用git filter-branch更改文件名大小写

我有一个git repo,其中一些文件的名称只有不同的分支.

作为一个简单的例子,在master中,有一个文件alpha/beta/foo.cpp,在分支中bar,有一个file alpha/beta/Foo.cpp.

问题是,当我尝试切换分支时,git将不允许我这样做.有一个错误,我目前没有方便,但它基本上看起来像

对文件alpha/beta/Foo.cpp的更改将被覆盖 - 中止

即使后续git status显示工作目录是干净的.

由于此repo尚未共享(它实际上是我正在进行迁移的大型Perforce软件仓库的镜像),我认为使用git filter-branch重写历史记录没有任何问题,但是当我这样做时,我做了任何区分大小写的更改迷路了.

我用的时候

git filter-branch -f -d /tmp/tmpfs/filter-it \
--tree-filter path/to/script \
--tag-name-filter cat --prune-empty -- --all
Run Code Online (Sandbox Code Playgroud)

脚本看起来像这样

#!/bin/bash
if [ -e alpha/beta/foo.cpp ] ; then
    mv alpha/beta/foo.cpp alpha/beta/Foo.cpp
fi
Run Code Online (Sandbox Code Playgroud)

最终的结果是重写refs(预期),但文件本身实际上并没有像我期望的那样在两个分支上重命名.

有什么建议?

git version-control git-filter-branch

3
推荐指数
1
解决办法
1086
查看次数

标签 统计

git ×2

git-filter-branch ×1

version-control ×1