2016-12-01 2 views
1

Zunächst einmal muss ich erwähnen ... Ich bin ein kompletter Anfänger Git, und wie man es benutzt. So nackt mit meinem Unverständnis hier.Wie synchronisiert man von einem Server zu einem Master-Git-Repo?

So, vor kurzem hatten wir einen 3rd-Party-Entwickler, der eine ganze Reihe von Anpassungen auf unserer bald live-Website machte, im Grunde verschwinden von uns. Sie hatten Git benutzt. Bevor sie jedoch offline gingen, übertrugen sie den Git Repo an mich. Bis zu diesem Zeitpunkt hatte ich Git nie benutzt. Aus zeitlichen Gründen habe ich es mir zur Aufgabe gemacht, die meisten der letzten Änderungen auf unserer Website vorzunehmen, und zwar direkt auf dem Server, der währenddessen tatsächliche Backups erstellt. Irgendwann habe ich versucht, den Server wieder mit dem Master zu synchronisieren, aber ich wurde abgelehnt, weil ich möglicherweise einige Dateien übersteuern konnte. Ich habe versucht, einen Thread zu lesen, und leider endete ich mit einem harten Reset auf meinem Git. Ich habe eine Wiederherstellung versucht, aber das scheint meine Git-Situation nicht zurückgesetzt zu haben.

Nun möchte ich alle Änderungen, die auf dem Server abgeschlossen wurden, nehmen und einen neuen Git Master Repo starten. Ich bin in Ordnung, mit dem Abwischen aller Zweige, die vorher existierten, aber ich habe keine Ahnung, wie man den Server mit einem neuen Git Repo verbindet (den ich gerade in Bitbucket erstellt habe) und den gesamten erforderlichen Inhalt auf den neuen Repo schiebe. Ich habe Angst, diese Sequenzen falsch zu machen, da ich nicht von vorne beginnen muss (obwohl ich eine volle Magento 2-Sicherung meines Servers vor etwa einer Stunde habe).

Die Repos werden auf Bitbucket gehostet, wenn das einen Unterschied macht.

Ich habe eine lokale Installation von Sourcetree, aber ich habe keine Ahnung, wie man es richtig verwendet.

Wie für das alte Repo, werde ich es nicht löschen, und ich habe eine Kopie des Master/Ursprung Repo in meinem SourceTree (das werde ich wahrscheinlich zip und dann vollständig entfernen, sobald dies erledigt ist).

Sobald ich den Master aktualisiert habe, werde ich dies auf einem anderen Backup/Dev-Server bereitstellen, der zuvor wieder mit dem alten Git synchronisiert wurde.

alle und alle Hilfe ist willkommen.

+0

Ihre Frage ist sehr verwirrend. Ich sehe drei Hauptakteure in Ihrem Problem: die Arbeit des Auftragnehmers, Ihre aktuelle lokale Niederlassung und was sich auf dem Repository befindet. Aktualisieren Sie Ihre Frage, indem Sie uns mitteilen, welche Informationen wo sind und was Sie möchten. –

+0

Mögliches Duplikat von [So machen Sie letzte Commits in Git rückgängig?] (Http://stackoverflow.com/questions/927358/how-to-undo-last-commits-in-git) – OldBunny2800

Antwort

0

Es ist eines der wenigen Male, ich kann denken, wo "git reset --soft" Sinn macht!

Auf dem Server hier ist, was ich tun würde. Es gibt eine Reihe von Annahmen hier:

  1. Sie könnten auch den Auftrag Repo-Push-to-Bitbucket mit „cd/path/to/Repo; git push --mirror [bitbucket-url], und die Basis des Rest
  2. Angenommen, Sie haben Backups von allem
  3. Diese Schritte setzen voraus, dass das Verzeichnislayout auf dem Produktionsserver identisch mit dem Layout im Repo ist, abgesehen von Verzeichnissen, die Sie verschieben oder hinzufügen oder umbenennen müssen.
  4. Schließlich nehmen diese "Master" ist der Name der Bitbucket-Zweig, den Sie zurück synchronisieren möchten.

(Oh, und wählen Sie jeden beliebigen Texteditor, den Sie für den Schritt "Edit .gitignore" bevorzugen).

Wenn die Annahmen halten, hier ist die Reihenfolge der Befehle, die ich dem Produktionsserver zum Master synchronisieren zurück Zweig verwenden würde:

cd /path/to/code/on/server 
touch .gitignore 
edit .gitignore   # set dir and file patterns you want to omit 
git init    # init is safe even if git repo already present 
git remote add origin [bitbucket-url] 
git fetch 

# The "soft" reset! Makes git think your work on the server 
# directly followed from latest commit on 'master': 
git reset --soft origin/master 

git add .    # adds all files from all sub-directories 
git status    # do things look reasonable? 
git diff origin/master # should see all of your work in "patch" format 

# If everything looks good, do the commit! 
git commit -m 'sync prod back to bitbucket' 

# And send your commit to bitbucket! 
git push origin HEAD:refs/heads/master 

Eine Warnung: Seien Sie vorsichtig, was Sie mit dem .gitignore hinzufügen Datei.Alle Dateien oder Verzeichnisse, die mit den Mustern in dieser Datei übereinstimmen, werden von Git vollständig ignoriert und nicht mit Ihrem Bitbucket-Repository synchronisiert.

Verwandte Themen