2016-08-18 4 views
1

Ich habe ein Problem mit einem git clone Befehl. Wenn ich laufen`git Klon/VERZEICHNIS` versus `git Klon file: /// VERZEICHNIS`

$ git clone /SOURCE_DIRECTORY /TARGET_DIRECTORY 

Alles funktioniert gut und ich bekomme

Initialized empty Git repository in /TARGET_DIRECTORY/.git/ 

Wenn ich diesen Befehl ausführen (nur file:// hinzugefügt)

$ git clone file:///SOURCE_DIRECTORY /TARGET_DIRECTORY 

I

bekommen
Initialized empty Git repository in /TARGET_DIRECTORY/.git/ 
remote: Counting objects: 737, done. 
remote: Compressing objects: 100% (189/189), done. 
remote: Total 737 (delta 264), reused 725 (delta 256) 
Receiving objects: 100% (737/737), 68.25 KiB, done. 
Resolving deltas: 100% (264/264), done. 
error: Trying to write ref HEAD with nonexistant object XXXXXXXX 
fatal: Cannot update the ref 'HEAD'. 

Kann mir jemand sagen, was ist der Unterschied zwischen /DIRECTORY und file:///DIRECTORY und warum bekomme ich hier ein anderes Ergebnis?

+0

Gibt es einen bestimmten Verzeichnisnamen oder einen beliebigen Verzeichnisnamen? –

+0

Ich habe kein "any" -Verzeichnis versucht - aber es ist in jedem Verzeichnis, das ich ausprobiert habe, reproduzierbar (zB '/ var/lib/jenkins/jobs/project/workspace') –

+2

Siehe' Lokales Protokoll' unter 'https:// git-scm.com/book/de/v2/Git-on-the-Server-Die-Protokolle' – ElpieKay

Antwort

1

Von der Verbindung zum Git Docs dass @ElpieKay kommentiert mit:

Git operates slightly differently if you explicitly specify file:// at the beginning of the URL. If you just specify the path, Git tries to use hardlinks or directly copy the files it needs. If you specify file:// , Git fires up the processes that it normally uses to transfer data over a network which is generally a lot less efficient method of transferring the data. The main reason to specify the file:// prefix is if you want a clean copy of the repository with extraneous references or objects left out – generally after an import from another version-control system or something similar

So ist die zusätzliche Ausgabe, die Sie die Tatsache zu sehen bedeutet, dass Git ein lokales seine Netzwerk-Stack, um die Daten zu übertragen, anstatt das zu tun dreht sich nach oben kopieren, wie es in Ihrem ersten Beispiel tut. Wenn Sie also keinen Grund haben, den Netzwerkstack zum Übertragen der Daten zu verwenden, ist es besser, die file:// zu löschen.

Wie für den Fehler:

error: Trying to write ref HEAD with nonexistant object XXXXXXXX 
fatal: Cannot update the ref 'HEAD'. 

Diese Antworten zeigen, dass dies durch eine ältere Version von Git verursacht werden:

Versuchen Sie also, Ihren Git-Client zu aktualisieren.

+1

Thx für die detaillierte Antwort. Das Problem für mich ist, dass ich die 'file: //' nicht "fallen lassen" kann, da diese Operationen innerhalb eines Maven-Befehls stattfinden, die ich nicht leicht beeinflussen kann. Aber jetzt weiß ich, was ich als nächstes tun soll und werde eine neue Git-Version ausprobieren. –

+1

updating Git hat den Trick - immer noch wundernd, warum alles vor zwei Tagen funktionierte und dann "plötzlich" aufgehört zu arbeiten ... –

+0

Ja, ich weiß nicht, was würde es plötzlich zu brechen. Freut mich, dass es repariert wurde! –