重写 git 历史记录,使 crlf 保持一致

2024-02-25

我有一个 git 存储库,其中有 LF 和 CRLF 文件的细微变化。

在进行可能的切换之前,我想重写父提交和当前提交具有​​不同 LR/CRLF 编码的提交。

所以我尝试了以下“一行”(稍作编辑),我尝试运行todos如果文件的父版本包含 CR。

$ git filter-branch --tree-filter '
  echo
  P=$GIT_COMMIT^;
  FILES=$(git diff --name-only $P);
  for a in $FILES; do
     if ! git cat-file -e $P:$a; then echo "no parent"; continue; fi;
     if git show $:$a | grep -qUP '\r'; then
        echo "parent is dos";
        todos $a;
     else
        echo "parent is unix";
        fromdos $a;
     fi;
  done' 23498f..HEAD

这不起作用。任何人都可以发现错误或给出解决此问题的方法吗?


我正在回答我自己的问题。我原来的解决方案中的错误是FILES设置是错误的,因为没有在重写父级和当前提交,但在original父级和当前提交。

当像这样遍历一组提交时,需要更改的文件不是提交所触及的文件集,而是某些父提交弄乱行结尾的文件集。

这意味着我没有获得正确的文件集。有一个map提供给过滤器分支表达式的函数,可以将“原始”rev 转换为重写的rev。当我使用该功能时,它可以正常工作。

由此产生的“一行”看起来像这样:

$ git filter-branch -f --tree-filter '                         
    echo "\n $GIT_COMMIT";
    P=$(git rev-parse $GIT_COMMIT^);
    echo $P;
    P=$(map $P);
    echo $P;
    git cat-file commit $GIT_COMMIT;
    FILES=$(git diff --name-only $GIT_COMMIT $P);
    echo "FILES:\n$FILES"; 
    for a in $FILES; do
        git cat-file -e $P:$a > /dev/null 2>&1 || continue;
        if git show $P:$a | grep -qUP '\r'; then
           echo "parent is dos $a";
           todos $a;
        else
           echo "parent is unix $a";
           fromdos $a;
        fi;
    done;
    git add $FILES;' a6d9e..HEAD 

大多数我认为不需要最后一个“git add $FILES”,但这是我使用的命令,我不想提供不正确的答案。

注意:还应该可以定义FILES=$(git diff --name-only a6d9e HEAD)因此在遍历提交时使用固定集。这可能更简单,但我没有这样做。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

重写 git 历史记录,使 crlf 保持一致 的相关文章

  • 有没有办法让 gpg 签署所有以前的提交?

    正如标题所示 我正在寻找一种方法来 gpg 签署存储库中我以前的所有提交 最好不要为每次提交输入密码 我的方法是 git rebase exec git commit amend no edit n S i 8fd7b22 所有提交从下一个
  • Git - 远程:致命:你在一个尚未诞生的分支上

    我正在尝试设置一个钩子来从我的桌面推送到我的服务器 这在过去已经工作了无数次 但现在我在设置新网站时遇到错误 remote fatal You are on a branch yet to be born 我一如既往地完成了与命令相同的系列
  • 如何添加私有 github 存储库作为 Composer 依赖项

    我在 Laravel 5 1 项目的composer json 中有以下内容 用于添加公共 github 存储库作为依赖项 repositories type package package name myVendorName my pri
  • Git 推送失败(Github/RStudio)

    我过去曾在这台机器上成功使用过 Git 但突然间我无法再将我的提交推送到 Github 存储库 我对 Git 工具链所做的最后一次更改是除了 Windows 客户端的 Github 之外还安装了 Git 1 8 5 2 除非我已经启动了 G
  • 在本地系统上模拟多个用户/提交者

    从我的书中 我试图学习如何在本地系统本身上模拟多个 git 用户 我 将假装是所有这些多个用户 我按照书中的说明模拟多个用户对存储库提交更改 本书的输出显示了两个不同的人git log是 被执行 但是 我的输出仅显示一个用户 那就是我 如何
  • git tag -l 不会删除已删除的标签

    这是场景 我将我的存储库克隆到一个定期更新的目录 git pull 现在我又创建了一个目录并签出了相同的存储库 我必须创建一些标签 但我错误地创建了名称错误的标签 所以我从第一个目录中删除了标签 git tag d old git push
  • 带有 OAuth 访问令牌的 GitHub 克隆

    在脚本中 我尝试使用 OAuth 令牌克隆 GitHub 存储库 根据本教程 https github com blog 1270 easier builds and deployments using git over https and
  • 理想的 Android Studio gitignore 文件

    我最近创建了一个 Android 项目 但这是我第一次使用 Android Studio 我将该项目放在 Git 文件夹中 以便能够通过 Git 与其他开发人员远程工作 我发现默认的 gitignore 文件包含以下内容 iml gradl
  • 小型开发团队的 Git 分支策略 [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我们有一个网络应用程序 几乎每天都会更新和发布 我们使用 git 作为我们的版本控制系统 我们当前的分支策略非常简单且不完善 我们有一个主分支
  • 基于github仓库的本地仓库创建本地git仓库并保持更新

    我有一些基本的 git 知识 但我不知道如何实现这一点 我正在尝试克隆 github WordPress 入门主题下划线 https github com automattic s 这个想法是创建一个基本框架based 经过一些修改 在该存
  • git:更改旧的提交消息而不产生冲突

    我想使用以下命令更改一个相当旧的提交消息 git rebase i sha1 of commit 这很好 我愿意git commit amend并编辑消息 但是当我这样做时事情会变得很糟糕 git rebase continue 我遇到了多
  • 每个命令重置外部差异工具

    我最近安装了一个新的差异工具 差异性的 https github com Wilfred difftastic 这扰乱了我将差异复制到剪贴板 或文件 以发送这些内容的习惯 diff external difft As per https d
  • 在DOS中创建带有echo的文件而不插入回车符

    我想在 DOS 中的 CIFS 挂载上创建一个新文件 如果我做 echo hello gt foo txt hello 的末尾会有一个 CR 如何使用 echo 在 DOS cmd 中创建文件而不自动附加 CR 它导致 samba 和我的
  • 导入数千条记录后无法推送到 Heroku

    我有一个问题 我认为我的 sqlite3 数据库太大 我将大约 100 000 条记录导入到数据库中 并且能够 git Push 和 git Push heroku 现在我可能犯了一个错误 导入了太多记录 500 000 我能够推送到 gi
  • `checkout` = `reset` + `symbolic ref`?

    Suppose a branch是一个现有分支 指向与之前不同的提交HEAD指着 HEAD可能直接或通过某些方式指向提交branch 以下命令等效吗 git checkout a branch and git symbolic ref HE
  • git 项目与存储库,根本区别是什么?

    我有两个项目当前使用 SVN 我正在迁移到 git 我注册了 gitorious 并且可以选择创建新项目或添加存储库 我刚刚开始使用 git 所以我不知道有什么区别 或者更确切地说 如果我只是在一个项目下使用存储库 这意味着什么 如果我这样
  • 仅对 Visual Studio 团队服务强制执行拉取请求

    有一种方法可以强制某些人只能通过拉取请求为一个分支做出贡献 我希望他们能够接受拉取请求 但不能直接推送更改 这将很有用 因为我们有一些分支策略 对于接受拉取请求的人来说 例如构建必须通过 问题是 如果我们允许某人接受拉取请求 我们将允许他们
  • 是否存在用于编辑 doxygen 评论的“wiki”? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在开发一个相当大的开源 RTS 游戏引擎 Spring http springrts com 我最近
  • 规划 git 迁移的存储库布局

    我目前有一个大型 30K 提交 SVN 存储库 正在将其转换为 git 我们的代码库当前拥有一组通用 核心 代码 以及两个独立的基础 Java 和 NET 这使我们能够共享通用代码 并且当我们将构建推送给仅支持两种语言之一的客户时 我们可以
  • GitPython 并向 Git 对象发送命令

    GitPython http gitorious org git python是一种从 python 与 git 交互的方式 我正在尝试访问基本的 git 命令 例如git commit m message 从此模块中 根据this htt

随机推荐

  • tfs:如何解锁更改

    我最初编辑了一个文件 该文件进行了结帐 我收到了一台新电脑 现在我想编辑该文件 我不关心原始编辑 TFS 报告另一个用户对该文件具有独占锁定 它实际上不是另一个用户 而是我 但机器不同 因此工作空间不同 我尝试使用以下命令通过 tf 命令行
  • 在海量数据集上学习决策树

    我正在尝试使用 MATLAB 从巨大 即无法存储在内存中 数据集构建二元分类决策树 本质上 我正在做的是 收集所有数据 Try out n数据的决策函数 选出最佳决策函数 https stackoverflow com questions
  • 为不受支持的语言选择本地化

    我有 en 和 ru 语言的本地化 如果用户选择任何其他语言 fr de 我需要显示俄语本地化变体 我尝试将 info plist 中的 本地化本机开发区域 更改为 ru 俄语 但在使用不受支持的语言时 它始终显示英语 有相关问题 http
  • iFrame 内的 cordova 回调

    我使用 cordova 和 nanohttpd 创建了一些 Android Web 应用程序 主页是通过 localhost url 从 nanohttp 加载的 主页包含一个 iFrame 它从与主页相同的域 localhost 加载一些
  • 将 nd 数组转换为键、值字典

    python中是否有一个函数可以将nd数组转换为字典 其中key是索引元组 value是该索引处的矩阵值 例如 A np random random 3 4 5 Result i j k A i j k 当然 你可以使用np ndenume
  • 在 iPhone SDK 中实现 Core-Plot 时出现错误:“CorePlot-CocoaTouch.h:没有这样的文件或目录”

    当我尝试在 iPhone 应用程序中实现 Core Plot 时 出现以下错误 CorePlot CocoaTouch h 没有这样的文件或目录 我从下面的链接下载安装了 Core plot 包 http code google com p
  • 通过电子邮件将 Sparkline 图表作为 Google Sheets 范围内的图像/博客/png 发送

    我尝试将此解决方案应用于我的案例 通过电子邮件发送 SPARKLINE 图表会发送空白单元格而不是数据 https stackoverflow com questions 50133870 emailing sparkline charts
  • S3方法帮助(roxygen2)

    我正在尝试在包中使用 S3 方法 并认为在此处提出问题后我明白了如何设置它 使用 Roxygen 构建 R 包时 S3 方法一致性警告 https stackoverflow com questions 14237018 s3 method
  • 如何在声明式管道中使用 NodeLabel 参数插件

    我正在尝试将我的自由式作业转换为声明性管道作业 因为管道提供了更大的灵活性 我不知道如何使用 NodeLabel 参数插件 https wiki jenkins io display JENKINS NodeLabel Parameter
  • 如何为提交按钮添加事件监听器

    我在这个 html 上遇到了很多麻烦 我正在尝试向提交按钮添加事件侦听器 以便最终可以更改文档以显示表单信息 问题是 当填写表单时 按钮侦听器不执行任何操作 它可以在 jsfiddle 和其他类似的东西中工作 但不能作为独立文件工作 这让我
  • div 中的水印背景图片

    我想从存储的图像创建水印 但水印会影响上层 并缩小所有分区的颜色 div style background url blogthreadlist blogUri no repeat background position center di
  • Hive alter table 更改列名称为重命名的列提供“NULL”

    我曾尝试将表中的现有列重命名为新列 但名称更改后 新列只给我 NULL 值 Parquet 中表的存储格式 例如 user 是 Test 表中字符串数据类型的列 插入了值为 John 的示例记录 Select user from Test
  • 如何编写 VB.Net Lambda 表达式

    我现在正在开发一个 VB net 项目 我是 VB Net LINQ 的新手 想了解 Lambda 的等效项 var new orders Select x gt x items gt 0 在 VB Net 中 有人请推荐一下 lambda
  • MongoDB 中不区分大小写的排序

    如何按给定字段对 MongoDB 集合进行排序 不区分大小写 默认情况下 我先得到 A Z 然后再得到 a z Update 截至目前 mongodb 的索引不区分大小写 Users find collation locale en sor
  • TensorFlow 将函数应用于矩阵变量的每一行

    嗨 我是 Tensorflow 的新手 我想要在 R 中做这样的事情 mat tf Variable matrix 1 4 nrow 2 apply mat 1 cumprod 这在 Tensorflow 中可行吗 无论是在 Python
  • 从node-webkit访问USB设备?

    我正在构建一个需要在所有 3 个主要桌面环境 Windows Mac 和 Linux 上运行的 Node WebKit 应用程序 我需要我的应用程序连接到插入的 USB 设备 但我在精确计算时遇到了一些麻烦如何解决这个问题 是否有一个适用于
  • 在powerpoint中使用vba将两个形状合并为并集

    我正在尝试使用 union 属性将两个相同的形状合并为一个 编译代码时 它显示对象 commandbar 的方法 executemso 失败 我是 vba 新手 所以如果有人帮助我解决这个问题那就太好了 Sub ShapesUnion Di
  • 在Jboss wildfly和docker中使用cli时出现权限错误

    我扩展了一个 docker 镜像 在构建 dockerfile 时 我调用 Wildfly CLI 添加数据源 然后 当我尝试运行 dockerfile 时 出现以下错误 appui dev local appui dev local JB
  • Rails 3.2 中每个模型是否可以有多个夹具文件?

    在 Rails 3 2 中 给定的 ActiveRecord 对象是否可以有多个固定文件 客户要求将测试数据写入固定装置中 但也希望它们易于管理 我想通过引入第二组来稍微分割一下固定装置 原始版本将包括 需要 渲染任何内容 我无法通过谷歌找
  • 重写 git 历史记录,使 crlf 保持一致

    我有一个 git 存储库 其中有 LF 和 CRLF 文件的细微变化 在进行可能的切换之前 我想重写父提交和当前提交具有 不同 LR CRLF 编码的提交 所以我尝试了以下 一行 稍作编辑 我尝试运行todos如果文件的父版本包含 CR g