Ich wollte viele Git-Repos von meiner alten Windows 7-Maschine (git 2.6.3.windows.1) auf die neue unter Ubuntu 16.04 (git 2.7.4) übertragen. Da nicht alle von ihnen Remote-Repos hatten, beschloss ich, sie einfach zu kopieren. Das sollte funktionieren. Allerdings wurden alle verfolgten Dateien in allen Repos nicht bereitgestellt. Tatsächlich gibt es möglicherweise einige, die vor der Übertragung der Repos nicht festgeschrieben wurden, aber die Mehrheit wurde festgeschrieben.
Wenn ich nach der Datei suche diff
, die vor der Repo-Übertragung mit einem Befehl festgeschrieben wurde:
$git log -p -1 .gitignore
commit c566830cd3ffdf96556d29aee8dd1dc95d359872
Author: Pavel <[email protected]>
Date: Fri May 13 18:07:25 2016 +0300
Start
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..c2535fe
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,3 @@
+__pycache__
+.idea
+test
Es gibt den Verweis auf das letzte Commit zurück, bei dem diese Datei tatsächlich committet wurde. Das Commit im obigen Beispiel ist das erste im Repo.
Aus irgendeinem Grund weigert sich Git, festgeschriebene Dateien zu erkennen, sondern verknüpft sie mit dem letzten Commit, bei dem sie tatsächlich festgeschrieben wurden.
Liegt es an der Inkompatibilität verschiedener Git-Versionen oder Plattformen oder an etwas anderem? Und wie kann man dieses Problem lösen, ohne Repos zu beschädigen?
Antwort1
Sind das tatsächliche Änderungen? Mir scheint, als würde Git sich nur darüber beschweren, dass die Attribute der Dateien unterschiedlich sind, was bei verschiedenen Betriebssystemen sicherlich der Fall ist (weil Windows und Linux unterschiedliche Dateisysteme mit unterschiedlichen Metadaten haben).
Wie wäre es, einen „nackten“ Klon zu erstellen?
Unter Windows
Gehen Sie zu einem beliebigen Ordner, zB:
cd c:\mycode
Klonen Sie Ihr Repo lokal in diesen Ordner mit demnacktbedeutet, dass NICHTS ausgecheckt wird, nur Metadaten:
git clone --bare <path_of_your_repo>
Nun komprimieren Sie den resultierenden Ordner (zB"c:\mycode\<Ordner>.git") und übertragen Sie es manuell auf Linux.
UNTER LINUX
Unter Linux kopieren Sie zunächst den komprimierten Ordner aus Windows und entpacken ihn. Klonen Sie ihn dann in einen neuen Ordner, z. B.:
mkdir ~/mynewcode
cd ~/mynewcode
git clone /<where_you_copied_and_unzipped>/<folder>.git <--- i.e. this is the folder copied/unzipped from Windows
Außerdem können Sie jetzt den Ursprung ändern, wenn Sie den entpackten Windows-Ordner verwerfen möchten.
git remote set-url origin <new_origin>
ODER entfernen Sie es einfach vollständig:
git remote rm origin
Antwort2
Wie wäre es, sie auf GitHub hochzuladen und dann das Repo auf Ihrem Ubuntu zu klonen? (Hätte einen Kommentar abgegeben, aber ich habe noch keine 50 Rep)
Wenn Sie dabei Hilfe benötigen, kann ich Ihnen weitere Anweisungen geben.