古い Windows 7 マシン (git 2.6.3.windows.1) から Ubuntu 16.04 (git 2.7.4) の新しいマシンに多くの git リポジトリを転送したいと考えていました。すべてのリポジトリにリモート リポジトリがあるわけではないので、単純にコピーすることにしました。これでうまくいくはずです。ただし、すべてのリポジトリの追跡対象ファイルはすべてステージング解除されました。実際には、リポジトリの転送前にコミットされていなかったファイルもいくつかある可能性がありますが、大部分はコミットされていました。
diff
コマンドを使用してリポジトリ転送前にコミットされたファイルを確認すると、次のようになります。
$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
このファイルが実際にコミットされた最後のコミットへの参照を返します。上記の例のコミットは、リポジトリの最初のコミットです。
そのため、何らかの理由で、git はコミットされたファイルを認識せず、実際にコミットされた最後のコミットにリンクします。
これは、異なる Git バージョンやプラットフォームなどの非互換性の問題でしょうか? また、この問題を解決してリポジトリを壊さないようにするにはどうすればよいでしょうか?
答え1
これらは実際に変更されたのでしょうか? git はファイルの属性が異なると文句を言っているだけのように思えますが、これは異なる OS 間では必ず発生します (Windows と Linux は異なるファイル システムを持ち、メタデータも異なるため)。
「ベア」クローンを作成してみませんか。
Windowsの場合
何らかのフォルダに移動します。例:
cd c:\mycode
リポジトリをこのフォルダにローカルにクローンするには、裸オプションでは、何もチェックアウトされず、メタデータのみがチェックアウトされることを意味します。
git clone --bare <path_of_your_repo>
次に、結果のフォルダを圧縮します(例:"c:\mycode\<フォルダ>.git") をダウンロードし、手動で Linux に転送します。
Linuxの場合
Linux では、まず Windows から圧縮されたフォルダーをコピーして解凍します。次に、新しいフォルダーにクローンします。例:
mkdir ~/mynewcode
cd ~/mynewcode
git clone /<where_you_copied_and_unzipped>/<folder>.git <--- i.e. this is the folder copied/unzipped from Windows
また、解凍された Windows フォルダーを破棄したい場合は、origin を変更できるようになりました。
git remote set-url origin <new_origin>
または、完全に削除します。
git remote rm origin
答え2
それらを github にプッシュして、Ubuntu のリポジトリをクローンするのはどうでしょうか? (コメントしたいのですが、まだ 50 の rep がありません)
もしサポートが必要な場合は、さらに詳しい説明を提供できます。