Windows 10下使用git-filter-repo向最早提交添加文件的命令写法
在Windows 10环境下向Git仓库最早提交添加.gitignore或LICENSE的单行命令写法
核心逻辑说明
原命令的作用是仅在仓库的根提交(无父提交的最早提交)中添加指定文件,需要针对Windows的CMD和PowerShell环境调整语法,以下是具体实现:
前置准备
- 确保已安装
git-filter-repo工具 - 将需要添加的
.gitignore或LICENSE文件放在Git仓库的根目录下 - 打开终端(CMD或PowerShell)并切换到仓库根目录
1. 使用PowerShell的写法
PowerShell支持直接内嵌命令替换,写法更简洁:
添加.gitignore文件
git filter-repo --force --commit-callback "if not commit.parents: commit.file_changes.append(FileChange(b'M', b'.gitignore', b'$(git hash-object -w .gitignore)', b'100644'))"
添加LICENSE文件
git filter-repo --force --commit-callback "if not commit.parents: commit.file_changes.append(FileChange(b'M', b'LICENSE', b'$(git hash-object -w LICENSE)', b'100644'))"
2. 使用CMD的写法
CMD不支持直接内嵌命令替换,需要先获取文件的Git哈希值再执行命令:
添加.gitignore文件
- 先获取文件哈希值并存入变量:
for /f "delims=" %h in ('git hash-object -w .gitignore') do set HASH=%h
- 执行filter-repo命令:
git filter-repo --force --commit-callback "if not commit.parents: commit.file_changes.append(FileChange(b'M', b'.gitignore', b'%HASH%', b'100644'))"
添加LICENSE文件
- 获取哈希值:
for /f "delims=" %h in ('git hash-object -w LICENSE') do set HASH=%h
- 执行filter-repo命令:
git filter-repo --force --commit-callback "if not commit.parents: commit.file_changes.append(FileChange(b'M', b'LICENSE', b'%HASH%', b'100644'))"
关键参数解释
b'M':表示对文件执行添加/修改操作(根提交中无此文件,实际效果为添加)b'.gitignore'/b'LICENSE':文件在仓库中的相对路径,需与实际存放路径一致git hash-object -w <文件名>:将本地文件写入Git对象库并返回唯一哈希值,-w确保对象被持久化b'100644':普通文本文件的标准权限标识,无需修改
内容的提问来源于stack exchange,提问作者jmoreno
相关产品推荐
相关产品推荐

