710 Stimmen

Wie kann ich in ein nicht leeres Verzeichnis klonen?

Ich habe ein Verzeichnis A mit Dateien, die mit Verzeichnis B übereinstimmen. Verzeichnis A kann weitere benötigte Dateien enthalten. Verzeichnis B ist ein Git-Repositorium.

Ich möchte das Verzeichnis B in das Verzeichnis A klonen, aber Git-Clone erlaubt mir das nicht, da das Verzeichnis nicht leer ist.

Ich hatte gehofft, es würde nur .git klonen und da alle Dateien übereinstimmen, könnte ich von dort aus gehen?

Ich kann nicht in ein leeres Verzeichnis klonen, weil ich Dateien im Verzeichnis A habe, die nicht im Verzeichnis B sind, und ich möchte sie behalten.

Das Kopieren von .git ist keine Option, da ich Refs zum Pushen/Pullen benötige und diese nicht manuell einrichten möchte.

Gibt es eine Möglichkeit, dies zu tun?

Update: Ich glaube, das funktioniert, kann jemand Probleme erkennen? -->

cd a
git clone --no-hardlinks --no-checkout ../b a.tmp 
mv a.tmp/.git .
rm -rf a.tmp
git unstage # apparently git thinks all the files are deleted if you don't do this

1 Stimmen

Ich frage mich nur, was passieren würde, wenn '--no-checkout' weggelassen würde, außer dass der temporäre Klon mehr Speicherplatz und Zeit verbraucht. Wäre "git unstage" oder etwas anderes immer noch notwendig?

0 Stimmen

Vielleicht git-force-clone ?

1voto

Dmitri R117 Punkte 1882

Ich mochte Dale's Antwort und ich fügte außerdem hinzu

git clone --depth 2 --no-checkout repo-to-clone existing-dir/existing-dir.tmp
git branch dev_new214
git checkout dev_new214
git add .
git commit
git checkout dev
git merge dev_new214

Durch die geringe Tiefe wurden viele zusätzliche frühe Entwicklungszusagen vermieden. Der neue Zweig gab uns eine gute visuelle Geschichte, dass es einige neue Code von diesem Server, die in platziert wurde. Das ist meiner Meinung nach die perfekte Verwendung von Zweigen. Ich danke allen, die hier gepostet haben, für ihren großartigen Einblick.

1voto

Tom Punkte 133

Ich habe die gleichen Probleme, wenn ich versuche, nach c/code zu klonen

Aber dieser Ordner enthält eine ganze Reihe von Projekten.

Ich habe einen neuen Ordner in c/code/newproject erstellt und habe meinen Klon diesem Ordner zugeordnet.

git for desktop fragte dann nach meinem Benutzer und klonte dann problemlos.

0voto

shadowtalker Punkte 10289

Auf diese Frage gibt es viele Antworten, und ich glaube nicht, dass eine von ihnen die Möglichkeit abdeckt, A als Git-Repository zu initialisieren und dann von B nach A zu ziehen.

# Turn `A` into a Git repo and check in files
git -C A init
git -C A add --all
git -C A commit -m "Add existing files"

# Set `B` as a remote
git -C A remote add local-B file:///B

# Fetch & merge B 'master' to A 'master'
git -C A pull --allow-unrelated local-B master

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X