webentwicklung-frage-antwort-db.com.de

Eine Arbeitskopie eines nackten Repositorys erhalten

Ich habe einen Server, auf dem ich ein nacktes Repository zum Pushing habe. Mein Server muss jedoch über eine Arbeitskopie des Master-Zweigs verfügen.

Wie bekomme ich eine Arbeitskopie und diese nur aus einem leeren Repository?

23
Jonathan Allard

Sie können das Repository einfach in ein anderes Verzeichnis auf demselben Computer klonen:

git clone /bare/repo/dir.git

Das aktuelle Verzeichnis wird zu einem nicht-leeren Klon Ihres Repos, und Sie werden automatisch vom Zweig master ausgecheckt. Verwenden Sie dann die üblichen Befehle wie git pull, um es bei Bedarf zu aktualisieren.

Als Nebeneffekt ist dieser Vorgang sehr effizient - wenn Sie ein lokales Verzeichnis für git clone angeben, versucht git, Objekte zwischen diesen beiden Repos über feste Links zu teilen.

25
user4815162342

Ein bloßes Repository ist nur das .git-Verzeichnis eines Arbeitsverzeichnisses und ein Eintrag in der lokalen Konfigurationsdatei. Was ich getan habe, um ein nacktes Repository in ein vollständiges zu konvertieren, ist:

  • Erstellen Sie ein neues Unterverzeichnis .git und verschieben Sie alle Dateien aus dem freien Repository
  • Bearbeiten Sie die .git/config-Datei, um bare = true in bare = false zu ändern.
  • Schauen Sie sich den gewünschten Zweig an. Dadurch werden alle Dateien aus dem Repository in das Arbeitsverzeichnis extrahiert.

Sie können das Hidden-Attribut für das .git-Verzeichnis unter Windows festlegen, jedoch für die Dateien im Verzeichnis not.

10
ygoe

Ich suchte nach dem Ansatz "Freistehender Arbeitsbaum" (wie gesehen hier ):

git init --bare

git config core.bare false
git config core.worktree /somewhere/else/

git checkout -f
10
Jonathan Allard

Dies ist ein Riff von den anderen 2 Antworten, aber es füllt die Lücke für meinen Anwendungsfall - es dient zum Aktualisieren des Repos aus dem Origin und zum Auschecken von Verzweigungen und jeglicher Git-Operation, da Sie ein normales vollständiges Git-Repo erhalten.

git clone /path/to/bare/repo /new/path/to/full/repo
cd /new/path/to/full/repo
git remote set-url Origin [email protected]:Swift/swift.git

Nachdem Sie diese 3 Codezeilen ausgeführt haben, können Sie git pull und git branch und git checkout some_branch und so weiter, da Sie nun ein normales vollständiges Git-Repo mit Ihrem Remote-Repo verbunden haben.

3
GregT

So funktioniert es:

$ git init --separate-git-dir /path/to/existing-bare-repository /path/to/workdir
$ cd /path/to/workdir
$ git checkout .

Voilà!

Für Informationen: git init meldet: Reinitialized existing Git repository in /path/to/existing-bare-repository. Aber sei zuversichtlich. man git-init sagt: Die Ausführung von git init in einem vorhandenen Repository ist sicher. Dinge, die bereits vorhanden sind, werden dadurch nicht überschrieben.

Der Zauber ist, dass git init alleine Ihre Dateien nicht im Arbeitsverzeichnis erscheinen lässt. Sie müssen das Stammverzeichnis auschecken.

1
Adrian W

Sie können 'git show' dafür verwenden.

http://www.kernel.org/pub/software/scm/git/docs/git-show.html

Grundsätzlich gilt:

git --no-pager --git-dir /path/to/bar/repo.git show branch:path/to/file.txt
0
Ben Martin