Warum kann ich nicht schieben einen seichten Klon?

Den git clone --depth Befehl option sagt

--depth <depth> 
Create a shallow clone with a history truncated to the specified number of revisions. 
A shallow repository has a number of limitations 
(you cannot clone or fetch from it, nor push from nor into it),
 but is adequate if you are only interested in the recent history of a large project with a long history,
 and would want to send in fixes as patches. 

Warum shallow-clones haben diese Einschränkung? Warum ist es patches nur workflow?

Für einige Projekt-workflows, die ich übergeben zu müssen, nur der Letzte commit von einem einzigen Zweig zu einem "coder" und dann haben Sie in der Lage sein, um push Ihre (fast forward) Entwicklungen an den Haupt-server. Dies ist teilweise für Sicherheit, IP-Schutz-und repo-Größe, und teilweise zur Verringerung der Verwirrung, die ein großes repo bringt, einen naiv-coder. Gibt es ein git-workflow, der dies ermöglicht?


Update: Basierend auf Karl Bielefeldt beantworten Sie die git checkout --orphan sollte die richtige Antwort. Aber muss man noch die 'Klon' Zweig allein, an den neuen Benutzer, und werden in der Lage, schieben Sie es effektiv.

Mann Seite besagt:

git checkout [-q] [-f] [-m] [[-b|-B|--orphan] <new_branch>] [<start_point>] --orphan

Erstellen Sie ein neues orphan-Zweig, benannt <new_branch>, angefangen von
<start_point> und um es zu wechseln. Der erste commit gemacht auf diese neue
der Zweig hat keine Eltern, und es wird die Wurzel einer neuen Geschichte
völlig abgekoppelt von allen anderen Branchen und begeht.

Den index und die working-tree angepasst, wenn Sie zuvor
führen Sie git checkout <start_point>. Dies ermöglicht Ihnen, eine neue zu starten
Historie, eine Reihe von Pfaden, ähnlich <start_point> durch
einfach laufen git commit -a um die root-commit.

Dies kann nützlich sein, wenn Sie wollen, veröffentlichen Sie den Baum aus einem commit
ohne dass seine vollständige Geschichte. Sie können dies tun wollen, um
veröffentlichen Sie eine open-source-Zweig von einem Projekt, dessen aktuellen Baum ist
"sauber", aber deren vollständige Geschichte enthält urheberrechtlich geschützte oder anderweitig
belastet bits von code.

Wenn Sie anfangen wollen, ein getrenntes Historie, die eine Reihe von
Wege, die völlig Verschieden ist von der eines <start_point>, dann
Sie sollten klar den index und die working-Baum direkt nach Erstellung
die verwaisten Zweig durch ausführen git rm -rf . von der obersten Ebene des
arbeiten Baum. Danach sind Sie bereit, bereiten Sie Ihre neuen Dateien
repopulating die arbeiten Baum, durch kopieren aus anderswo,
extrahieren von Dateien mit tar, etc.

VonC Links zu den Junio-Kommentare ist interessant. Ich denke das Handbuch sollte die Führung in diesem Fall, und damit der richtige Befehl [z.B. clone <branch> --options] zu extrahieren, die nur den relevanten Teil des Geschäfts. Offensichtlich ist die Wahrscheinlichkeit push Erfolg erhöht, indem er ein paar verlinkten verpflichtet und SHA1s am unteren Ende der Geschichte, sperren Sie die repo-matching.


Update Git 1.9.0 release-notes 14 Feb '14.

"Holen aus einem flach-geklonte repository verwendet werden, verboten,
vor allem, weil die codepaths beteiligt waren, nicht sorgfältig geprüft
und wir haben nicht die Mühe, die Unterstützung einer solchen Verwendung. Diese Version versucht
zu ermöglichen-Objekt-transfer aus einem flach-geklonten repository in ein
mehr kontrolliert (d.h. der Empfänger wird eine flache repository
mit einer verkürzten Geschichte)."

Dies ist eine gute Nachricht für die flachen cloners.
Der nächsten Engen Klone evtl.

"reduzieren Sie die Verwirrung, die ein großes repo bringt, einen naiv-coder" ich glaube, Sie brauchen neue Entwickler:)
Die neuen Entwickler sind angefangen als naive Programmierer 😉 Und einige, die Verwirrung wird immer verwendet, um git selbst, das kann eine Herausforderung sein, also fangen wir einfach...
Die Idee mit einer Liste der commits ist wahrscheinlich das grundlegendste Konzept in Git. Wenn ich wurde eingeführt, um mit Git repos, dass immer nur 1 verpflichten, denke ich, wäre ich noch mehr verwirrt.
es war eher, dass zunächst ein neuer Entwickler (oder ein team), die gerade in git, kann nur gestartet werden, mit geringer Tiefe (ein halbes Dutzend verpflichtet?) - im Vergleich zu einigen bestehenden Verfahren, wo alle Sie sehen, ist der Letzte check-in! Wenn das Produkt von Zyklen mult-jährigen, die historischen CM Stil ist slooww, es ist also eine große änderung der Unternehmenskultur.
es scheint, dass man derzeit: check stackoverflow.com/a/21217267/4398050

InformationsquelleAutor Philip Oakley | 2011-08-01

Schreibe einen Kommentar