【问题标题】:Is it possible to 'git diff' 2 strings?是否可以 'git diff' 2 个字符串?
【发布时间】:2019-01-25 15:20:33
【问题描述】:

我有 2 个字符串,我想要它们之间的 git diff。我可以创建 file1 并添加 string1 作为其内容。

然后我可以创建 file2 并添加 string2 作为其内容。然后我可以 git diff file1 和 file2。

但是,鉴于我将字符串作为字符串(而不是文件内容),我可以避免这些冗长的步骤吗?有没有更简单的方法?

类似:

git diff "my first string" "my second string" # obviously does not work

【问题讨论】:

  • 你为什么要使用 git 呢?字符串是单行还是多行?

标签: git diff git-diff


【解决方案1】:

如果你坚持git方式,

git diff $(echo "my first string" | git hash-object -w --stdin) $(echo "my second string" | git hash-object -w --stdin)  --word-diff

【讨论】:

  • 我将如何处理换行符?我试过 \n 但不高兴 - 谢谢 - 需要为 windows 和 linux 工作
  • @danday74 在echo 之后加上-e
  • 似乎不再工作了:git version 2.30.2
  • @BookerB 您是否在 git 存储库中运行它?错误是什么样的?
  • 不是字符串比较的目的不是运行到 git repo 文件夹吗?错误开始:致命:不是 git 存储库(或任何父目录):.git 致命:不是 git 存储库(或任何父目录):.git 警告:不是 git 存储库。使用 --no-index 比较工作树用法之外的两个路径: git diff --no-index [] ;error END;我使用这个命令有一段时间了,直到 git 推送更新,它运行得很好。
【解决方案2】:

您不必为此使用 git diff,Git 用于跟踪代码库中的更改。

有一个很好的linux命令

diff  <(echo "my first string" ) <(echo "my second string")

这是一个很好的答案 https://stackoverflow.com/a/454549/4620609

【讨论】:

  • 有与此等效的 Windows 吗?我似乎无法得到公认的答案。
  • 使用 Windows 上可用的任何差异工具...我不使用 Windows
  • git diff 比普通 diff 功能强大得多。
【解决方案3】:

在实现层面,我猜,git diff 使用某个 diff 实用程序(例如 diff)生成补丁,并重定向到寻呼机(默认为less)查看。所以你不需要调用git diff来比较两个字符串。

如果你想要git diff输出的补丁文件格式,流动的命令将是一个帮助。

diff -u &lt;(echo "my first string" ) &lt;(echo "my second string")

-u 被附加以告诉diff 输出具有统一上下文的补丁。

顺便说一句,git 提供了一个配置项diff.external 来允许你生成 diff 不是通过内部 diff 机制,而是使用给定的命令。环境变量GIT_EXTERNAL_DIFF 具有相同的效果。

【讨论】:

    猜你喜欢
    • 2012-10-26
    • 1970-01-01
    • 1970-01-01
    • 2014-10-19
    • 2018-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多