TortoiseGit: Mover arquivos para uma nova pasta não reconhecida como movimento

6

Estou tentando mover alguns arquivos no meu repositório para uma nova pasta. Eu quero que o git / TortoiseGit reconheça que isto é um movimento em vez de um delete e múltiplos adds.
Como posso fazer isso funcionar? Eu verifiquei a documentação do TortoiseGit e procurei no Google, mas isso não parece ser muito útil.

Então, o que eu tenho é essa estrutura:

repo_root/somefile.txt

O que eu quero:

repo_root/new_folder/somefile.txt

Claro que "somefile.txt" representa todos os arquivos e pastas que estão sendo movidos.

    
por Dries 30.09.2015 / 13:49

2 respostas

9

Lembre-se de uma coisa: O Git rastreia apenas o conteúdo do arquivo.

De Movendo arquivos seção do livro Pro Git v2:

Unlike many other VCS systems, Git doesn’t explicitly track file movement. If you rename a file in Git, no metadata is stored in Git that tells it you renamed the file. However, Git is pretty smart about figuring that out after the fact

E, mover e renomear é a mesma coisa no Git.

Então, o Git detecta que a movimentação / renomeação automática funciona somente sob a premissa de que esses arquivos não são modificados .

O Git faz estas coisas quando você move / renomeia apenas o arquivo:

  1. Um arquivo rastreado é excluído, o git obtém o SHA-1 do conteúdo desse arquivo, suponha que o valor seja abc .
  2. Um arquivo untrack é adicionado, git calcula o SHA-1 do conteúdo desse arquivo, suponha que o valor seja abc também.
  3. Se você confirmar neste momento, o git descobrirá que eles têm o mesmo valor SHA-1 e os tratará como uma renomeação.

Suponha que você modificou alguns arquivos rastreados e também os move para outra pasta. Então, infelizmente, o git não pode detectá-los como renomear / mover automaticamente quando commitar.

Se você realmente quer que o git rastreie renomear / mover automaticamente, você precisa fazer :

Certifique-se de NÃO modificar o (s) arquivo (s) e somente renomear / mover arquivo (s) em um commit.

Se você quiser modificar o arquivo e mover o arquivo ao mesmo tempo, e quiser que o git os detecte como renomear / mover usando o TortoiseGit, então no seu caso:

  1. Clique com o botão direito no arquivo e clique em TortoiseGit -> Rename... item do menu de contexto.
  2. prefix new_folder\ para o nome do arquivo, consulte:
  3. confirmar

Nota: você precisa renomear os arquivos um por um. Suponha muito trabalho para fazer. Então, melhor renomear apenas o arquivo.

Nota2: Se você modificar muito no arquivo, o git não poderá descobrir que é um renomear / mover.

    
por 09.05.2016 / 08:49
0

O Git irá lidar com isso no back-end após você se comprometer. Enquanto você estiver lidando com os arquivos não confirmados, ele tratará inicialmente as criações & exclui como ações separadas, mas depois que você o confirmar, tentará resolver as exclusões com cria para ver se era apenas uma movimentação de arquivo. Você pode ver isso por si mesmo no log de confirmação com as mensagens "arquivo antigo == > novo arquivo" quando o git encontrar um arquivo movido.

Alternativamente, você pode usar git mv se isso te faz sentir mais seguro link

    
por 16.11.2015 / 18:01