Eu queria transferir muitos repositórios git da minha antiga máquina Windows 7 (git 2.6.3.windows.1) para a nova no Ubuntu 16.04 (git 2.7.4). Como nem todos eles tinham repositórios remotos, decidi simplesmente copiá-los. Isso deve funcionar. No entanto, todos os arquivos rastreados em todos os repositórios deixaram de ser testados. Na verdade, é possível que alguns deles não tenham sido cometidos antes da transferência dos acordos de recompra, mas a maioria deles foi cometida.
Se eu procurar diff
o arquivo que foi confirmado antes da transferência do repositório com um comando:
$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
ele retorna a referência ao último commit onde este arquivo foi realmente confirmado. O commit no exemplo acima é o primeiro no repositório.
Então, por alguma razão, o git se recusa a reconhecer os arquivos confirmados, mas os vincula ao último commit onde eles foram realmente confirmados.
É o problema de incompatibilidade de diferentes versões ou plataformas git ou algo mais? E como resolver esse problema e não frear os repos?
Responder1
Essas mudanças são reais? Parece-me que o git está apenas reclamando que os atributos dos arquivos são diferentes, o que certamente acontecerá entre sistemas operacionais diferentes (porque o Windows e o Linux têm sistemas de arquivos diferentes com metadados diferentes).
Que tal criar um clone "vazio".
NO WINDOWS
Vá para alguma pasta, por exemplo:
cd c:\mycode
Clone localmente seu repositório nesta pasta usando onuopção, isso significa que NADA será verificado, apenas metadados:
git clone --bare <path_of_your_repo>
Agora, feche a pasta resultante (por exemplo"c:\mycode\<pasta>.git") e transferi-lo manualmente para o Linux.
NO LINUX
No Linux, primeiro copie a pasta compactada do Windows e descompacte-a. Agora, clone para alguma nova pasta, por exemplo:
mkdir ~/mynewcode
cd ~/mynewcode
git clone /<where_you_copied_and_unzipped>/<folder>.git <--- i.e. this is the folder copied/unzipped from Windows
E agora você pode alterar a origem se quiser jogar fora a pasta descompactada do Windows.
git remote set-url origin <new_origin>
OU, basta removê-lo completamente:
git remote rm origin
Responder2
Que tal enviá-los para o github e depois clonar o repositório no seu Ubuntu? (Teria comentado, mas ainda não tenho 50 representantes)
Se precisar de ajuda com isso, posso fornecer mais instruções.