Ich habe Verzeichnis A mit Dateien, die mit Verzeichnis B übereinstimmen. Verzeichnis A enthält möglicherweise andere benötigte Dateien. Verzeichnis B ist ein Git-Repo.
Ich möchte Verzeichnis B in Verzeichnis A klonen, aber Git-Clone erlaubt es mir 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, da ich Dateien in Verzeichnis A habe, die sich nicht in Verzeichnis B befinden, und ich möchte sie behalten.
Das Kopieren von .git ist keine Option, da Refs gedrückt / gezogen werden sollen und nicht manuell eingerichtet werden sollen.
Gibt es eine Möglichkeit, dies zu tun?
Update: Ich denke das funktioniert, kann jemand irgendwelche Probleme sehen? ->
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
Antworten:
Das hat bei mir funktioniert:
HINWEIS: Legt
-t
den Upstream-Zweig für Sie fest, wenn Sie dies wünschen und dies normalerweise der Fall ist.quelle
git reset origin/master
nach demgit fetch
, wird es funktionieren (auch alle lokalen Änderungen beibehalten).git checkout ...
beschwere, dass alle meine Dateien überschrieben werden und ich sie zuerst verschieben sollte. Wenn ich zuerst "git reset origin / master /" mache, beschwert sich der Checkout-Befehl darüber, dass bereits ein Zweig mit dem Namen master existiert.git checkout master
war ein ausreichender letzter Schritt für mich.fatal: A branch named 'master' already exists
. Ich glaube, ich habe es nicht wirklich gebraucht.In den folgenden Shell-Befehlen
existing-dir
befindet sich ein Verzeichnis, dessen Inhalt mit den verfolgten Dateien imrepo-to-clone
Git-Repository übereinstimmt .quelle
git reset --hard HEAD
oder es würde die "gelöschten" Dateien nicht aufgeben.git reset HEAD
hat gut für mich funktioniert.git reset --hard HEAD
zerstört alle Änderungen in Ihren Dateien. Wenn sie also nicht genau mit den Dateien im Repository übereinstimmen, sollten Sie dies nicht tun.git reset HEAD
scheint keinen Einfluss auf mich zu haben.git reset --hard HEAD
tut - aber das verliert alle Änderungen, die Sie an den Dateien vorgenommen haben. Gibt es eine bessere Lösung?Eine kleine Änderung an einer der Antworten, die für mich funktioniert haben:
um sofort mit der Arbeit an der Hauptniederlassung zu beginnen.
quelle
git branch --set-upstream-to=origin/master master
.Warnung - Dies könnte möglicherweise Dateien überschreiben.
Geändert von der Antwort von @ cmcginty - ohne das -f hat es bei mir nicht funktioniert
quelle
git checkout .
auschecken?Folgendes habe ich getan, als ich das gleiche Problem hatte (zumindest denke ich, dass es das gleiche Problem ist). Ich ging in Verzeichnis A und rannte
git init
.Da ich nicht wollte, dass auf die Dateien in Verzeichnis A git folgt, habe ich .gitignore bearbeitet und die vorhandenen Dateien hinzugefügt. Danach lief ich
git remote add origin '<url>' && git pull origin master
et voíla, B wird ohne einen einzigen Schluckauf in A "geklont".quelle
Ich habe dies vor ein paar Augenblicken verwendet, erfordert die am wenigsten potenziell zerstörerischen Befehle:
Und voilá!
quelle
Ein anderes einfaches Rezept scheint für mich gut zu funktionieren:
Mein Hauptanwendungsfall beim Auschecken in ein Verzeichnis mit vorhandenen Dateien ist die Steuerung meiner Unix-Punktedateien mit Git. In einem neuen Konto enthält das Home-Verzeichnis bereits einige Dateien, möglicherweise sogar diejenigen, die ich von Git erhalten möchte.
quelle
.git/config
Datei zeigt an, dass die Repos leer sind. 2.) Dateien, die normalerweise in gespeichert.git
sind, werden im Stammverzeichnis (das Sie aufgerufen haben.git
) gespeichert.git
und Einstellungcore.bare
zufalse
kümmern, so dass ich immer noch gut über diese Methode fühlen.Das hat bei mir funktioniert:
quelle
Ich hatte ein ähnliches Problem mit einem neuen Apache-Webverzeichnis (mit WHM erstelltes Konto), das ich als Staging-Webserver verwenden wollte. Ich musste mein neues Projekt zunächst mit der dortigen Codebasis klonen und regelmäßig Änderungen durch Abrufen aus dem Repository bereitstellen.
Das Problem war, dass das Konto bereits Webserver-Dateien enthielt wie:
... dass ich mein Repository weder löschen noch festschreiben wollte. Ich brauchte sie, um einfach ungestuft und ohne Spur dort zu bleiben.
Was ich getan habe:
Ich ging zu meinem Webordner (existierender_Ordner):
und dann:
Es wurde (wie erwartet) eine Liste vieler nicht bereitgestellter Dateien angezeigt - diejenigen, die ursprünglich bereits in meinem cPanel-Webkonto vorhanden waren.
Dann habe ich dank dieses Artikels die Liste dieser Dateien hinzugefügt zu:
Diese Datei
.gitignore
ermöglicht es Ihnen , fast wie die Datei, das Bereitstellen von Dateien zu ignorieren. Danach hatte ich nichts mehr im .git / -Verzeichnis festzuschreiben - es funktioniert wie ein persönliches.gitignore
, das niemand sonst sehen kann.Überprüfen Sie nun die
git status
Retouren:Jetzt kann ich Änderungen auf diesem Webserver bereitstellen, indem ich sie einfach aus meinem Git-Repository ziehe. Ich hoffe, dies hilft einigen Webentwicklern, auf einfache Weise einen Staging-Server zu erstellen.
quelle
Folgendes mache ich:
quelle
Vielleicht habe ich Ihre Frage falsch verstanden, aber wäre es nicht einfacher, wenn Sie die Dateien von A in das Git-Repo B kopieren / verschieben und die benötigten mit git add hinzufügen ?
UPDATE: Aus dem Git-Dokument:
QUELLE: http://git-scm.com/docs/git-clone
quelle
Ich habe nach etwas Ähnlichem gesucht und mir Folgendes ausgedacht:
In meiner Situation habe ich einen aktiven Webbaum und habe versucht, ein Remote-Repository dafür zu erstellen, ohne eine der Dateien im aktuellen Webbaum zu verschieben. Folgendes habe ich getan:
git init
git clone --bare /path/to/web/repo
[remote "origin"]
Abschnitt.[remote "origin"]
im Webbaum einen Abschnitt zu .git / config hinzu, der auf das neue Remote-Repo verweist.quelle
git clone --bare
hier ist überflüssig und umständlich. Warum nicht gleichgit remote add origin <URL>
?Dies ist Arbeit für mich, aber Sie sollten Remote-Repository-Dateien mit den lokalen Dateien zusammenführen:
quelle
Ich mochte Dales Antwort und fügte hinzu
Durch die geringe Tiefe wurden viele zusätzliche frühe Entwickler-Commits vermieden. Der neue Zweig hat uns eine gute visuelle Geschichte gegeben, dass ein neuer Code von diesem Server eingefügt wurde. Das ist meiner Meinung nach der Zweig mit der perfekten Verwendung. Mein Dank geht an die großartigen Einblicke aller Leute, die hier gepostet haben.
quelle
Ich habe die gleichen Probleme beim Versuch, auf c / code zu klonen
Dieser Ordner enthält jedoch eine ganze Reihe von Projekten.
Ich habe einen neuen Ordner in c / code / newproject erstellt und meinen Klon diesem Ordner zugeordnet.
Git für Desktop dann von meinem Benutzer gefragt und dann gut geklont.
quelle