... particularmente quando movido através de unidades flash USB FAT32 ou exFAT?
Mesmo que a cópia de trabalho provavelmente sofra alterações de permissões e remoção óbvia de links simbólicos (se os estiver usando) ... que são alterações que o Git detectará bem, além disso, o .git/
conteúdo do diretório é bom o suficiente para permite mover um repositório de um sistema operacional e/ou sistema de arquivos para outro? por exemplo, Windows, distribuições Linux comuns, macOS, NTFS, ext FS, APFS ...
Posso assumir o Git versão 2+, se necessário.
Sim, o banco de dados do repositório geralmente é portátil em todos os sistemas operacionais modernos, incluindo o Windows. Ele não depende de nenhum atributo estendido e, até agora, também não depende da diferenciação de maiúsculas e minúsculas. Os nomes de arquivos dentro do banco de dados parecem ter no máximo 52 caracteres.
O principal requisito é que os nomes de arquivos preservem suas maiúsculas e minúsculas, mesmo em sistemas de arquivos que não diferenciam maiúsculas de minúsculas (por exemplo, se você copiar .git/HEAD de ext4 para FAT32 para APFS para HFS+ para ext4, ele deve permanecer .git/HEAD e não se tornar .git/head ). Felizmente, todos os sistemas de arquivos listados acima preservam maiúsculas e minúsculas, então tudo bem.
Uma coisa a ter em mente é que cada ramificação ou tag é representada como um arquivo separado em .git/refs. O Git impõe um limite estrito de conjunto de caracteres para funcionar com qualquer sistema de arquivos, mas isso nem sempre é suficiente - se você estiver mudando para um sistema de arquivos que não diferencia maiúsculas de minúsculas (como APFS ou NTFS), é melhor esperar que o repositório não contenha múltiplas ramificações ou tags diferindo apenas no caso. Da mesma forma, o Git não proíbe o uso de nomes de dispositivos legados do DOS, como
aux
ounul
como nomes de ramificação/tag.(Tecnicamente, mover o repositório em diferentes sistemas de arquivos pode perder alguns metadados de arquivo, como o
a-w
estado "somente leitura" ( ) de blobs de objetos, mas isso não é algo que o próprio Git examina de qualquer maneira.)Se você usar o FAT32 apenas como um transporte temporário, considere usar
git pack-refs --all --prune
erm -rf .git/logs
evitar problemas de nome de filial, por mais improváveis que sejam. Execute também umgit repack -d; git prune
para reduzir o número de arquivos de objetos soltos.Você pode até mesmo usar
git bundle
para criar um blob de fácil transporte contendo todo ou parte do histórico de confirmação.Embora copiar o
.git
diretório funcione na maioria dos casos, há algumas ressalvas que precisam de atenção:git-svn pode lembrar algumas informações do usuário que você não deseja copiar, como nome e endereço de e-mail, por exemplo em
.git/logs/refs/remotes/trunk
.Um repositório clonado conterá um link de volta para o pai que o comando copy não cancelará. Você pode remover esse link usando
git remote remove origin
.Se você tiver links simbólicos no
.git
diretório, certifique-se de desreferenciá-los. Por exemplo:Alguns itens de configuração podem variar entre as plataformas, como drivers de comparação personalizados e scripts de gancho que fazem referência a programas externos. Ao copiar entre plataformas diferentes, deve-se verificar itens como
core.ignorecase
,core.autocrlf
,core.safecrlf
ecore.fileMode
provavelmente alguns outros.git clone é uma operação segura que pode operar entre computadores:
A clonagem cria automaticamente uma conexão remota chamada "origem" apontando de volta para o repositório original, facilitando a interação com um repositório central.
Você pode achar interessante ler o seguinte tutorial para mover seletivamente um diretório git:
Como mover um repositório Git completo