windows - Git siger 'Binære filer a ... og b ... adskille' til * .reg filer

Indlæg af Hanne Mølgaard Plasc

Problem



Er der mulighed for at tvinge Git til at behandle .reg filer som tekst? Jeg bruger Git til at spore mine windows registry tweaks og Windows bruger .reg for disse filer.


UPDATE 1: Jeg fik det til at køre en diff (tak, Andrew). Men nu ser det ud som dette nedenfor. Er dette et kodende problem?


index 0080fe3..fc51807 100644
--- a/Install On Rebuild/4. Registry Tweaks.reg
+++ b/Install On Rebuild/4. Registry Tweaks.reg
@@ -1,49 +1,48 @@
-<FF><FE>W^@i^@n^@d^@o^@w^@s^@ ^@R^@e^@g^@i^@s^@t^@r^@y^@ ^@E^@d^@i^@t^@o^@r^@
-^@;^@;^@;^@;^@;^@;^@;^@;^@;^@;^@;^@;^@;^@;^@;^@;^@;^@;^@;^@;^@;^@;^@;^@;^@;^@;
-^@^M^@
...


Nogle ideer?


UPDATE 2: Tak alle, der hjalp: her er hvad jeg gjorde til sidst: Opret fil .gitattributes med indhold *.reg text diff og derefter konverterede jeg filerne til UTF-8 som UTF-16 er underligt med diffs. Jeg bruger ikke udenlandske tegn, så UTF-8 virker for mig.

Bedste reference


For at fortælle git at eksplicit diffunde en filtype, læg følgende i en .gitattributes fil i dit lagerets rodmappe: [10]


*.reg diff

Andre referencer 1


Git behandler dine registreringsdatabase eksportfiler som binære filer, fordi de har NUL'er. Der er ingen god måde at differe eller slå sammen generelle binære filer. En ændring af en byte kan ændre fortolkningen af ​​resten af ​​filen.


Der er to generelle tilgange til håndtering af binære filer:



  1. Accepter at de er binære. Diffs vil ikke være meningsfuldt, så spørg dem ikke. Føj dem aldrig sammen, hvilket kun betyder at tillade ændringer på en gren. I dette tilfælde kan dette gøres lettere ved at sætte hver tweak (eller sæt relaterede tweaks i en separat fil, så der er færre mulige måder forskelle vil ske i en fil.

  2. Gem ændringerne som tekst, og konverter/afkonverter til disse binære formularer.



Selvom disse 'tekst' -filer indeholder UTF-16-kodningen NUL'er. Der synes dog ikke at være nogen ikke-ASCII-bits. Kan du konvertere dem til ASCII (eller UTF-8, som vil være ASCII, hvis der ikke er udvidede tegn)?

Andre referencer 2


Konverter .reg filer fra utf16 til utf8 ved at åbne hver .reg fil i notesblok og gemme som Encoding UTF-8.

Andre referencer 3


Opret en utf16toascii.py :


#!/usr/bin/env python3
import sys
data = open(sys.argv[-1]).read()
ascii = data.decode('utf-16').encode('ascii', 'replace')
sys.stdout.write(ascii)


Så i bash gøre:


$ echo "*.reg diff=utf16strings" >> .gitattributes
$ git config --global diff.utf16strings.textconv /path/to/utf16toascii.py


Og det er godt at diff differe registreringsdatabaser, samt Xcode .strings-filer eller enhver anden utf-16-fil.