megfontolandó:

$ git --version git version 2.20.1 (Apple Git-117) $ git diff-index --quiet HEAD ; echo $? 1 $ git status > /dev/null $ git diff-index --quiet HEAD ; echo $? 0 

Ez a kis- és nagybetűkkel nem rendelkező fájlrendszerrel rendelkező makókon található . (Nem tudom, hogy ez releváns.) Azon a gazdagépen, ahol ez bekövetkezik, van egy dokkolókép, amely ugyanazzal a könyvtárral van felszerelve egy debian programot futtat, és a dokkképben ennek az ellenkezője fordul elő:

$ git diff-index --quiet HEAD ; echo $? 0 # At this point, `git status` was invoked outside the docker image $ git --version git version 2.20.1 $ git diff-index --quiet HEAD ; echo $? 1 

Az egyértelműség kedvéért az itt végrehajtott parancsok sorrendje a következő: git diff-index a dokkoló képén (0-t ad vissza), git diff-index a gazdagépen (1-et ad vissza), git status a gazdagépen, git diff-index a gazdagépen (0-t ad vissza) , git diff-index a dokkoló képén (1-et ad vissza).

Alapvetően, ha a git-status szolgáltatást egy környezetben futtatom, A git diff-index sikeres lesz (0-t ad vissza) és kudarcot vall a másikban. Van valami gondolata arról, hogy mi történik? Ez nem nagy ügy, és gyanítom, hogy az eset a fájlrendszer érzéketlensége a hibás, de nagyon szeretem a megalapozott magyarázatot.

Válasz

Nekem volt hasonló probléma a és szerintem az ok ugyanaz volt. Ehhez nem kell bevonni a Docker vagy a kis- és nagybetűk nélküli fájlrendszereket, bár ezek súlyosbíthatják a problémát.

A Git fenntartja a fájlok tartalmára vonatkozó információk gyorsítótárát. Normál esetben ez átlátszó és magas szintű az olyan parancsok, mint git status és git diff szükség szerint frissítik a gyorsítótárat.

Alsó szintű parancsok, például git diff-index és a git diff-files gyors, de hozzávetőleges eredmények visszaadására szolgálnak. Nem frissítik a gyorsítótárat. 0 értéket adnak vissza, ha “megbizonyosodnak arról, hogy az általuk összehasonlított dolgok megegyeznek, de amikor visszaadnak 1-et, annyit jelent, hogy” nem tudom, hogy a dolgok azonosak “. Ha a gyorsítótár bejegyzései elavultak, akkor” lehetséges, hogy a dolgok azonosak, de git diff-xxx nem tudja.

Nem tudom pontosan, hogyan működik a gyorsítótár. Első kísérleted során úgy tűnik, hogy az első hívás a git diff-index címre észrevette, hogy a gyorsítótár bejegyzése elavult, és így 1-et adott vissza a „Nem tudom” kifejezésre. Ezután git status frissítette a gyorsítótárat, a git diff-index címre kerülő második hívás érvényes gyorsítótár-bejegyzéseket látott, és megállapíthatta, hogy a fájlok azonosak. A második kísérletben a Úgy tűnik, hogy a Docker tárolón kívüli git status olyan gyorsítótár-bejegyzéseket hozott létre, amelyek git diff-index az elavultnak tekintett tárolóban vannak, ezért a git diff-index 1-et adott a következőre: “Nem tudom”.

Az én megoldásom az volt, hogy elfelejtettem az alacsony szintű parancsokat, és ragaszkodtam a git diff --quiet.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük