我怎样才能在 git 中比较二进制文件?

我怎样才能在 git 中比较二进制文件?

为了在 git 中比较二进制文件,我假设我需要设置一个 difftool。

哪些 difftools 有效?如何输入参数?

答案1

如果您想强制 git 将二进制文件差异显示为纯文本差异,请使用--text如下选项:

git diff --text

答案2

您可以textconv为文件类型设置配置选项。请参阅“执行二进制文件的文本差异”gitattributes(5). 您应使用什么取决于文件类型。

示例 1

假设您想要比较 zip 文件的内容。在这种情况下,您应该输入以下文件之一$XDG_CONFIG_HOME/git/config$HOME/.gitconfig$GIT_DIR/config

[diff "zip"]
    textconv = unzip -v

下次您要求对 repo 中的 zip 文件进行差异比较时,它将调用unzip -v两个版本并对结果文本进行差异比较。

示例 2

对于 PDF 文件,您可以使用例如pdfinfo

[diff "pdf"]
    textconv = pdfinfo

示例 3

如果没有针对某种文件类型的特定信息实用程序,您可以使用hexdump(FreeBSD 和 OSX 自带,Linux 上也可用):

[diff "bin"]
    textconv = hexdump -v -C

答案3

罗兰史密斯(Roland Smith)的回答很有帮助,但目前并不完整(参见评论) - 这分为两部分。

.git/config您可以在存储库文件或个人全局$XDG_CONFIG_HOME/git/config/.gitconfig(通常 )文件中定义新的 diff 命令$HOME/.gitconfig,例如使用以下十六进制 diff 命令hexdump

[diff "hex"]
    textconv = hexdump -v -C
    binary = true

接下来,您需要使用存储库的.gitattributes文件来告诉 git 应该使用这个特殊的 diff 命令来使用哪些文件:

# Binary files (no line-ending conversions), diff using hexdump
*.bin binary diff=hex

与文件一样.gitignore,该.gitattributes文件也应该被签入到您的存储库中。

就我而言,我有几个不同的文件扩展名,我想将它们视为二进制文件(例如,如果在 Windows 上使用 git,则避免任何行尾转换),并且还可以通过以下方式查看任何差异hexdump

https://github.com/peterjc/galaxy_blast/commit/5ec4695e6c3da3926fb100ca006f0f3e88c53c3d

也可以看看https://github.com/resin-io/etcher/pull/1367另一个例子是定义一个 hexdump diff 命令用于图像文件。

答案4

我喜欢@qwr回答以上,但我想在十六进制转储模式下看到它,而不是(压缩)base85 “Git 二进制补丁”格式。如果我使用@peterjc 的回答从上面,我得到了两个十六进制转储之间的差异,这就像连接两个十六进制转储一样,所以不是很有用。

因此,我决定修补 git(Gentoo 上的 v2.37.3)以添加仅在模式下有效的--hexdump参数,现在它看起来像这个例子:git diff--binary

$ git diff --hexdump --binary  HEAD~1  "./dated/sheet0005_older/2006/sheet0620/20000809_1118(3)..JPG"
diff --git a/txt/papersheets/dated/sheet0005_older/2006/sheet0620/20000809_1118(3)..JPG b/txt/papersheets/dated/sheet0005_older/2006/sheet0620/20000809_1118(3)..JPG
index 263d047bf61e2104157d4b1feda5b77a01000847..c78a9a1ddddd0267dc490711eaf1723e38767b09 100644
GIT binary hexdump (non-reusable, for human eyes only) patch
delta 34
CC A0 18 C7 FD 17 02 FF  D8 83 87 11 87 87 11 01   |................|
87 87 11 02 87 87 11 03  87 87 11 04 B7 87 11 05   |................|
C5 FE                                              |..              |

delta 4140
C7 FD 17 CC A0 18 7F FF  D8 FF E1 11 83 45 78 69   |.............Exi|
66 00 00 49 49 2A 00 08  00 00 00 0A 00 0F 01 02   |f..II*..........|
00 0E 00 00 00 86 00 00  00 10 01 02 00 06 00 00   |................|
00 A6 00 00 00 12 01 03  00 01 00 00 00 01 00 00   |................|
00 1A 01 05 00 01 00 00  00 DE 00 00 00 1B 01 05   |................|
00 01 00 00 00 E6 00 00  00 28 01 03 00 01 00 00   |.........(......|
00 02 00 00 00 31 01 02  00 26 00 00 00 B6 00 00   |.....1...&......|
00 32 01 02 00 14 00 00  00 EE 00 00 00 13 02 03   |.2..............|
00 01 00 00 00 02 7F 00  00 00 69 87 04 00 01 00   |..........i.....|
00 00 02 01 00 00 76 02  00 00 53 6F 6E 79 20 45   |......v...Sony E|
72 69 63 73 73 6F 6E 00  00 00 00 00 00 00 00 00   |ricsson.........|
00 00 00 00 00 00 00 00  00 00 57 38 30 30 69 00   |..........W800i.|
00 00 00 00 00 00 00 00  00 00 52 31 42 43 30 30   |..........R1BC00|
32 20 20 20 20 20 70 72  67 43 58 43 31 32 35 30   |2     prgCXC1250|
30 39 32 5F 45 55 5F 31  5F 43 41 20 34 2E 35 00   |092_EU_1_CA 4.5.|
00 00 48 00 00 00 01 00  00 00 48 00 00 00 01 00   |..H.......H.....|
00 00 32 30 30 30 7F 3A  30 38 3A 30 39 20 31 31   |..2000.:08:09 11|
3A 31 38 3A 32 32 00 16  00 9A 82 05 00 01 00 00   |:18:22..........|
00 10 02 00 00 9D 82 05  00 01 00 00 00 18 02 00   |................|
00 27 88 03 00 01 00 00  00 64 00 00 00 00 90 07   |.'.......d......|
00 04 00 00 00 30 32 32  30 03 90 02 00 14 00 00   |.....0220.......|
00 20 02 00 00 04 90 02  00 14 00 00 00 34 02 00   |. ...........4..|
00 01 91 07 00 04 00 00  00 01 02 03 00 04 92 0A   |................|
00 01 00 00 00 48 02 00  00 07 92 03 00 01 00 00   |.....H..........|
00 02 00 00 00 08 7F 92  03 00 01 00 00 00 00 00   |................|
00 00 09 92 03 00 01 00  00 00 00 00 00 00 00 A0   |................|
07 00 04 00 00 00 30 31  30 30 01 A0 03 00 01 00   |......0100......|
00 00 01 00 00 00 02 A0  04 00 01 00 00 00 60 06   |..............`.|
00 00 03 A0 04 00 01 00  00 00 C8 04 00 00 05 A0   |................|
04 00 01 00 00 00 58 02  00 00 01 A4 03 00 01 00   |......X.........|
00 00 00 00 00 00 02 A4  03 00 01 00 00 00 00 00   |................|
00 00 03 A4 03 00 01 00  00 00 00 00 00 00 04 A4   |................|
05 00 01 00 00 00 7F 50  02 00 00 06 A4 03 00 01   |.......P........|
00 00 00 03 00 00 00 0C  A4 03 00 01 00 00 00 03   |................|
00 00 00 00 00 00 00 01  00 00 00 3C 00 00 00 1C   |...........<....|
00 00 00 0A 00 00 00 32  30 30 30 3A 30 38 3A 30   |.......2000:08:0|
39 20 31 31 3A 31 38 3A  32 32 00 32 30 30 30 3A   |9 11:18:22.2000:|
30 38 3A 30 39 20 31 31  3A 31 38 3A 32 32 00 00   |08:09 11:18:22..|
00 00 00 0A 00 00 00 64  00 00 00 64 00 00 00 02   |.......d...d....|
00 01 00 02 00 04 00 00  00 52 39 38 00 02 00 07   |.........R98....|
00 04 00 00 00 30 7F 31  30 30 00 00 00 00 07 00   |.....0.100......|
...

8B 38 FC B5 92 51 F3 79  D6 8E F1 B2 E0 E4 12 08   |.8...Q.y........|
03 F1 3F CC 55 88 A1 86  DA 15 86 DD 22 8A 31 9C   |..?.U.......".1.|
22 49 85 1D F8 02 97 52  AD 64 7F FF D9 FF C4 01   |"I.....R.d......|
A2 00 00 01 05 01 01 01  01 81 0E 85 0E 01 85 0E   |................|
02 85 0E 03 85 0E 04 B5  0E 05 B9 FE               |............    |

lines 219-269/269 (END)

而不是通常的方式,通常的方式是这样的:

$ git diff --binary  HEAD~1  "./dated/sheet0005_older/2006/sheet0620/20000809_1118(3)..JPG"
diff --git a/txt/papersheets/dated/sheet0005_older/2006/sheet0620/20000809_1118(3)..JPG b/txt/papersheets/dated/sheet0005_older/2006/sheet0620/20000809_1118(3)..JPG
index 263d047bf61e2104157d4b1feda5b77a01000847..c78a9a1ddddd0267dc490711eaf1723e38767b09 100644
GIT binary patch
delta 34
lcmX@JK;rmcai;$_n%f22+XWecm<foPftY1`yCCb)e*gxY4e<Z~

delta 4140
zcmb7Hc{o&U8$UCHv5cLv3?`I_-kFJ-8K#jU#=fSKWXVzyvQ2Tazh#UydNm>Y5-PGJ
zp@mUdK4eLjB1=RDsc3x1oA>&<zU%wvyRYka-M{mk`@Wy&{+;`e=d}LZ{yJL<+!)w+
zFB+*I?0FUdjEvL(UH}020bv*%5Q10?1QCeyK)wKi7z_cxAioJ2828_P1mdz=d=lcj
zw_@NB$3eNfAYTmu4{-^|&qEN0|EdEAp$E@cuD=Vxp{jvUmbH&}2u9z})5YK4#~XV8
z-*$|E#d`j>Xob@|jK$(Hn|9I9{jmLE99|2HCE`!(+n&aqK70tHxmOE{H-xZx@P9lW
zi^YN@EP;e2VsJPTjzGfWfo(uW#IL?YprhR0;!+S-`SaJAT{pK*L;_rp!{YH+MB=Z$
zFi;HF7T1J0Ea_Ja4C<9Dng7?;&^j`Ct9K}$7u<T-tjYHq2eP*|z+thl?Ei=k&;F&A
z6ZAz8Tbu=*gnNtIZ*H9TD}J*k{5OvHjdSJwY7(@75_q;=AfN=)Z+x@BreHb{&=B|`
zY>M{Zn*FaeDD?06O|>=whbqDU*361XfY?@hAk^PxC=x(yjSbY;{~WU}=%D|M*#N|U
zA2S&Imnvh>I(&=Y+MHj={`uPfcxd2<fGB{MhX={S%?l!tNIpJZew2hDN<aW5Eha83
zAt$3CFDHXWW0d!*U=-Dr(CFO<RMoLKO-)S&6(X5{*V(&I6A$C#<3kCcqyz<}@H@~u
z@c*}MGy$T#LO?K(jescva8VdS6m}n;4+Gx<C<G*yC_)sV01^69a$fLUWW|Y^-P6R9
zInvKhU(1R=ICv=FX7!fkXx6dTt0k&#Y)b`KIv?;^T505}a_jwBvuX1aopBZ#*!Y}u
z-znL!=}xepUB<J}mm(mf5FAjFB2e)VXRA%R<3N+AkgBtS1B!)}as#sUgXKY&`c8T_
zp_RBUJYyGHS7gWt@Mu$SXd-)Nor!`AXB<)<W3>+Tzs)KV%Pl_=qWv{8!H2!u-IARW
zLq?8UXwWq(e>(Ap^GMNQ9Me4~^wlq;UmjK3$)HXBuvnG5MlZV3Bzt2l!ECp(i*gcU
zxwqy>bgspa;e6<QOD+0&zjlz=;fIQC95;x#m*o-Tk(xhfT3VZ`l+=^q8{^_r<sdlr
z<)ilE+Z<EH{+ID^g1*I_!!F^>OFw#NJ$dyVi2Ot88ccMT&<ksKoOAau+@D?0T;<!M
zJ()~!<7f3Brx#E~@K3&%_UNLEN7Zg{W@cAP&J{$t(?v9feX9`l6mY?tlZq=ivPgZk
zBkd!;N$9aqFvmFyb0&{f|IDyf{n)gZd-vT5g~yR0WMgz@9p_R(hwO#@?=f`6u`iTi
...
z(Ts<g0S%htr2K@R8^Gzs+%<O-6^>pt1*Fd!+G!~e93M&((FohUZ$pbEi~~`zJRVmb
zxJaWDN4w-XZ`2A{Z;sd81GeLsHFYiAdp>RJo~W$GIFY@weVC!D>2!xU!urEx%cYP$
z#^Qsq2{B&8BIUL1pLb&3O2!N;UdJ&NjiTkg!PBkET)~aOjpwi&=wFW;23fdJv=A&>
R2p%njh!)~{D8yaI`8U9_qG|vD

lines 32-82/82 (END)

(我使用...上面的方法编辑/剪掉大部分输出行)

这是补丁:

Index: /var/tmp/portage/dev-vcs/git-2.37.3/work/git-2.37.3/diff.c
===================================================================
--- git-2.37.3/diff.c
+++ git-2.37.3/diff.c
@@ -743,7 +743,8 @@ enum diff_symbol {
    DIFF_SYMBOL_NO_LF_EOF,
    DIFF_SYMBOL_CONTEXT_FRAGINFO,
    DIFF_SYMBOL_CONTEXT_MARKER,
-   DIFF_SYMBOL_SEPARATOR
+   DIFF_SYMBOL_SEPARATOR,
+  DIFF_SYMBOL_BINARY_HEXDUMP_DIFF_HEADER,
 };
 /*
  * Flags for content lines:
@@ -1472,6 +1473,9 @@ static void emit_diff_symbol_from_struct
    case DIFF_SYMBOL_BINARY_DIFF_HEADER:
        fprintf(o->file, "%sGIT binary patch\n", diff_line_prefix(o));
        break;
+   case DIFF_SYMBOL_BINARY_HEXDUMP_DIFF_HEADER:
+       fprintf(o->file, "%sGIT binary hexdump (non-reusable, for human eyes only) patch\n", diff_line_prefix(o));
+       break;
    case DIFF_SYMBOL_BINARY_DIFF_HEADER_DELTA:
        fprintf(o->file, "%sdelta %s\n", diff_line_prefix(o), line);
        break;
@@ -3237,10 +3241,11 @@ static void emit_binary_diff_body(struct
                  mmfile_t *one, mmfile_t *two)
 {
    void *cp;
-   void *delta;
+   void *delta,*plaindelta;
+  char *hexdump_ptr;
    void *deflated;
    void *data;
-   unsigned long orig_size;
+   unsigned long orig_size,hexdump_size;
    unsigned long delta_size;
    unsigned long deflate_size;
    unsigned long data_size;
@@ -3249,20 +3254,31 @@ static void emit_binary_diff_body(struct
     * whichever is smaller.
     */
    delta = NULL;
+  plaindelta=NULL;
+  hexdump_ptr=NULL;
+  hexdump_size=0;
    deflated = deflate_it(two->ptr, two->size, &deflate_size);
    if (one->size && two->size) {
-       delta = diff_delta(one->ptr, one->size,
+       plaindelta = diff_delta(one->ptr, one->size,
                   two->ptr, two->size,
                   &delta_size, deflate_size);
-       if (delta) {
-           void *to_free = delta;
+       if (plaindelta) {
+           //void *to_free = plaindelta;
            orig_size = delta_size;
-           delta = deflate_it(delta, delta_size, &delta_size);
-           free(to_free);
+           delta = deflate_it(plaindelta, delta_size, &delta_size);
+           //free(to_free);
+      if (!(o->output_format & DIFF_FORMAT_HEXDUMP)) {
+        free(plaindelta);
+        plaindelta=NULL;
+      }
        }
    }
 
    if (delta && delta_size < deflate_size) {
+    //using delta (z packed aka deflated)
+    // show plaindelta & orig_size
+    hexdump_ptr=plaindelta;
+    hexdump_size=orig_size;
        char *s = xstrfmt("%"PRIuMAX , (uintmax_t)orig_size);
        emit_diff_symbol(o, DIFF_SYMBOL_BINARY_DIFF_HEADER_DELTA,
                 s, strlen(s), 0);
@@ -3271,6 +3287,10 @@ static void emit_binary_diff_body(struct
        data = delta;
        data_size = delta_size;
    } else {
+    //using deflated two (the second file, z packed ie. gzipped or similar)
+    // show two->ptr & two->size
+    hexdump_ptr=two->ptr;
+    hexdump_size=two->size;
        char *s = xstrfmt("%lu", two->size);
        emit_diff_symbol(o, DIFF_SYMBOL_BINARY_DIFF_HEADER_LITERAL,
                 s, strlen(s), 0);
@@ -3280,6 +3300,64 @@ static void emit_binary_diff_body(struct
        data_size = deflate_size;
    }
 
+  if (o->output_format & DIFF_FORMAT_HEXDUMP) {
+#define LINELEN 16
+#define LINELENPLUSZERO (LINELEN+1)
+#define UNPRINTABLECHAR '.'
+    char line[LINELENPLUSZERO];
+    memset(line,'\0',LINELENPLUSZERO);
+    //line[LINELEN]=0;
+    assert(0 == line[LINELEN]);
+    int i=0;
+    const unsigned long origlen=hexdump_size;
+    for (; i<origlen; i++) {
+      const char c=hexdump_ptr[i];
+      const int mod=i%16;
+      if (isprint(c)) {
+        line[mod]=c;
+      } else {
+        line[mod]=UNPRINTABLECHAR;
+      }
+      fprintf(o->file,"%02X ", c & 0xff);
+      if (i>0){
+        if ((i+1) % 8==0) {
+          fprintf(o->file," ");
+        }
+        if ((i+1) % 16==0) {
+          assert(0 == line[16]);
+          fprintf(o->file," |%s|\n",line);
+        }
+      }
+    }
+    int weat=i%16;
+    if (weat != 0) {
+      line[weat]=0;
+      if (weat<8){
+        fprintf(o->file," ");
+      }
+      for (int i=weat;i<16;i++) {
+        fprintf(o->file,"   ");
+      }
+      fprintf(o->file," ");
+      fprintf(o->file," |%s",line);
+      for (int i=weat;i<16;i++) {
+        fprintf(o->file," ");
+      }
+      fprintf(o->file,"|\n");
+    }
+    //for (int i=0; i<origlen; i++) {
+    //  printf("%02X ",fp[i] & 0xff);
+    //}
+    //fprintf(o->file,"\n");//this is FOOTER below
+    //emit_diff_symbol(o, DIFF_SYMBOL_BINARY_DIFF_BODY,
+    //      line, len, 0);
+
+    if (plaindelta) {
+      free(plaindelta);
+      plaindelta=NULL;
+    }
+  } else { //not re-indenting the below, for an easier-on-the-eyes patch.
+
    /* emit data encoded in base85 */
    cp = data;
    while (data_size) {
@@ -3301,6 +3379,7 @@ static void emit_binary_diff_body(struct
        emit_diff_symbol(o, DIFF_SYMBOL_BINARY_DIFF_BODY,
                 line, len, 0);
    }
+  }
    emit_diff_symbol(o, DIFF_SYMBOL_BINARY_DIFF_FOOTER, NULL, 0, 0);
    free(data);
 }
@@ -3308,7 +3387,11 @@ static void emit_binary_diff_body(struct
 static void emit_binary_diff(struct diff_options *o,
                 mmfile_t *one, mmfile_t *two)
 {
-   emit_diff_symbol(o, DIFF_SYMBOL_BINARY_DIFF_HEADER, NULL, 0, 0);
+  if (o->output_format & DIFF_FORMAT_HEXDUMP) {
+    emit_diff_symbol(o, DIFF_SYMBOL_BINARY_HEXDUMP_DIFF_HEADER, NULL, 0, 0);
+  } else {
+    emit_diff_symbol(o, DIFF_SYMBOL_BINARY_DIFF_HEADER, NULL, 0, 0);
+  }
    emit_binary_diff_body(o, one, two);
    emit_binary_diff_body(o, two, one);
 }
@@ -4710,7 +4793,7 @@ void diff_setup_done(struct diff_options
                      DIFF_FORMAT_NAME_STATUS |
                      DIFF_FORMAT_CHECKDIFF |
                      DIFF_FORMAT_NO_OUTPUT))
-       options->output_format &= ~(DIFF_FORMAT_RAW |
+       options->output_format &= ~(DIFF_FORMAT_RAW | DIFF_FORMAT_HEXDUMP | //this clears these bits
                        DIFF_FORMAT_NUMSTAT |
                        DIFF_FORMAT_DIFFSTAT |
                        DIFF_FORMAT_SHORTSTAT |
@@ -5389,6 +5472,9 @@ static void prep_parse_options(struct di
        OPT_BIT_F(0, "raw", &options->output_format,
              N_("generate the diff in raw format"),
              DIFF_FORMAT_RAW, PARSE_OPT_NONEG),
+       OPT_BIT_F(0, "hexdump", &options->output_format,
+             N_("generate the diff in hexdump format for human eyes only(ie. can't git apply it!)"),
+             DIFF_FORMAT_PATCH | DIFF_FORMAT_HEXDUMP, PARSE_OPT_NONEG),
        OPT_BITOP(0, "patch-with-raw", &options->output_format,
              N_("synonym for '-p --raw'"),
              DIFF_FORMAT_PATCH | DIFF_FORMAT_RAW,
@@ -6755,7 +6841,7 @@ void diffcore_std(struct diff_options *o
 {
    int output_formats_to_prefetch = DIFF_FORMAT_DIFFSTAT |
        DIFF_FORMAT_NUMSTAT |
-       DIFF_FORMAT_PATCH |
+       DIFF_FORMAT_PATCH | //DIFF_FORMAT_HEXDUMP | //we don't use hexdump here because it implies DIFF_FORMAT_PATCH.
        DIFF_FORMAT_SHORTSTAT |
        DIFF_FORMAT_DIRSTAT;
 
Index: /var/tmp/portage/dev-vcs/git-2.37.3/work/git-2.37.3/diff.h
===================================================================
--- git-2.37.3/diff.h
+++ git-2.37.3/diff.h
@@ -103,6 +103,7 @@ typedef struct strbuf *(*diff_prefix_fn_
 #define DIFF_FORMAT_PATCH  0x0010
 #define DIFF_FORMAT_SHORTSTAT  0x0020
 #define DIFF_FORMAT_DIRSTAT    0x0040
+#define DIFF_FORMAT_HEXDUMP    0x0080
 
 /* These override all above */
 #define DIFF_FORMAT_NAME   0x0100
$ git diff -h
usage: git diff --no-index [<options>] <path> <path>

Diff output format options
    -p, --patch           generate patch
    -s, --no-patch        suppress diff output
    -u                    generate patch
    -U, --unified[=<n>]   generate diffs with <n> lines context
    -W, --function-context
                          generate diffs with <n> lines context
    --raw                 generate the diff in raw format
    --hexdump             generate the diff in hexdump format for human eyes only(ie. can't git apply it!)
    --patch-with-raw      synonym for '-p --raw'
    --patch-with-stat     synonym for '-p --stat'

强制将文本文件视为二进制文件似乎没有什么帮助git diff

$ cat .gitattributes                                                                                                                                              
*.log -diff

这是必需的,否则即使--binary指定了,它也将被强制显示为文本。请参见man 5 gitattributes部分Marking files as binary

$ GIT_PAGER=cat

即告诉git不要使用less

$ git diff
diff --git a/genkernel-boot.log b/genkernel-boot.log
index 85ebc17..3d89503 100644
Binary files a/genkernel-boot.log and b/genkernel-boot.log differ
$ git diff --binary
diff --git a/genkernel-boot.log b/genkernel-boot.log
index 85ebc177502e392a41183f9baa730e01180b647d..3d89503b6824c39d7c70f446aa2fe1d400ab72f0 100644
GIT binary patch
delta 49
zcmV-10M7rgi2;U*0kFdsv-%c+6tlD|!V8m7LJpH20tb`eLI{&8LlFcZb75<f(Gf1Q
HkT)O==e`m1

delta 42
wcmZqcWZVEmhsBtSD|06^3Yly^EY>K(nvt2DpSM{+`y2OU0WPV{Y32&N08T9qbN~PV

这就是为什么我说它看起来没用,因为这是什么?:

$ git diff --binary --hexdump
diff --git a/genkernel-boot.log b/genkernel-boot.log
index 85ebc177502e392a41183f9baa730e01180b647d..3d89503b6824c39d7c70f446aa2fe1d400ab72f0 100644
GIT binary hexdump (non-reusable, for human eyes only) patch
delta 49
B0 89 01 86 89 01 B0 C3  16 B3 FA 16 81 14 B3 B4   |................|
2B C2 0B 93 50 42 0E 93  1E 02 07 93 E0 42 08 93   |+...PB.......B..|
2A 43 11 04 20 73 61 6B  93 D1 11 2E B3 90 37 20   |*C.. sak......7 |
0D                                                 |.               |

delta 42
86 89 01 B0 89 01 B0 C3  16 03 73 79 6D 93 01 12   |..........sym...|
34 B3 C3 16 81 14 05 68  69 63 6F 6E B3 10 2B F6   |4......hicon..+.|
0B 93 10 0A 1A B3 66 37  20 0D                     |......f7 .      |

$ git diff --text
diff --git a/genkernel-boot.log b/genkernel-boot.log
index 85ebc17..3d89503 100644
--- a/genkernel-boot.log
+++ b/genkernel-boot.log
@@ -95,7 +95,6 @@
 [2020-11-23 14:52:20] Failed (1): 'modprobe u14-34f'
 [2020-11-23 14:52:20] Failed (1): 'modprobe ultrastor'
 [2020-11-23 14:52:20] Failed (1): 'modprobe wd7000'
-[2020-11-23 14:52:20] Failed (1): 'modprobe sym53c8xx'
 [2020-11-23 14:52:20] Failed (1): 'modprobe dmx3191d'
 [2020-11-23 14:52:20] Failed (1): 'modprobe imm'
 [2020-11-23 14:52:20] Failed (1): 'modprobe in2000'
@@ -190,7 +189,6 @@
 [2020-11-23 14:52:20] Failed (1): 'modprobe hid-apple'
 [2020-11-23 14:52:20] Failed (1): 'modprobe hid-belkin'
 [2020-11-23 14:52:20] Failed (1): 'modprobe hid-cherry'
-[2020-11-23 14:52:20] Failed (1): 'modprobe hid-chicony'
 [2020-11-23 14:52:20] Failed (1): 'modprobe hid-cypress'
 [2020-11-23 14:52:20] Failed (1): 'modprobe hid-dummy'
 [2020-11-23 14:52:20] Failed (1): 'modprobe hid-ezkey'
@@ -244,6 +242,7 @@
 [2020-11-23 14:52:20] Failed (1): 'modprobe btrfs'
 [2020-11-23 14:52:20] Failed (1): 'modprobe reiserfs'
 [2020-11-23 14:52:20] Failed (1): 'modprobe jfs'
+[2020-11-23 14:52:21] Executed: 'mount -o move /sys /newroot/sys' sak
 [2020-11-23 14:52:20] Failed (1): 'modprobe nfs'
 [2020-11-23 14:52:20] Failed (1): 'modprobe xfs'
 [2020-11-23 14:52:20] Failed (1): 'modprobe zfs'

相关内容