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

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

Estou tentando mover alguns arquivos do meu repositório para uma nova pasta. Quero que o git/TortoiseGit reconheça que isso é uma movimentação em vez de uma exclusão e múltiplas adições.
Como posso fazer isso funcionar? Verifiquei a documentação do TortoiseGit e pesquisei no Google, mas não pareceu ser muito útil.

Então, o que eu tenho é esta 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.

Responder1

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

DeMovendo arquivosseção do livro Pro Git v2:

Ao contrário de muitos outros sistemas VCS, o Git não rastreia explicitamente a movimentação de arquivos. Se você renomear um arquivo no Git, nenhum metadado será armazenado no Git informando que você renomeou o arquivo. No entanto, o Git é muito inteligente em descobrir isso depois do fato

E mover e renomear é a mesma coisa no Git.

Então,O Git detecta a movimentação/renomeação automaticamente e só funciona sob a premissa de que esses arquivos não foram modificados.

O Git faz essas coisas apenas quando você move/renomeia arquivos:

  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, o git calcula o SHA-1 do conteúdo desse arquivo, suponha que o valor abctambém seja .
  3. Se você fizer commit 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 moveu para outra pasta. Então, infelizmente, o git não consegue detectá-los como renomear/mover automaticamente ao confirmar.

Se você realmente deseja que o git rastreie a renomeação/mudança automaticamente,você precisa fazer:

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


Se você deseja modificar e mover arquivos ao mesmo tempo, e deseja que o git os detecte como renomeação/movimento usando o TortoiseGit, então no seu caso:

  1. Clique com o botão direito nesse arquivo e clique no TortoiseGit -> Rename...item do menu de contexto.
  2. prefixo new_folder\para o nome do arquivo, consulte: insira a descrição da imagem aqui
  3. comprometer-se

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

Nota2: Se você modificarbastanteno arquivo, o git não consegue descobrir que é uma renomeação/mudança.

Responder2

DeDocumentação do TortoiseGit:

Se você quiser mover arquivos dentro de sua árvore de trabalho, talvez para uma subpasta diferente, você pode usar o manipulador de arrastar e soltar com o botão direito do mouse:

A. selecione os arquivos ou diretórios que deseja mover

B.arraste para a direita-los para o novo local dentro da árvore de trabalho

C. solte o botão direito do mouse

D. no menu pop-up selecioneMenu de contexto → Git Move arquivos versionados aqui

Responder3

O Git cuidará disso no back-end após você confirmar. Enquanto você manipula os arquivos não confirmados, ele inicialmente tratará as criações e exclusões como ações separadas, mas depois de confirmar, ele tentará resolver as exclusões com cria para ver se foi realmente apenas uma movimentação de arquivo. Você pode ver isso por si mesmo no log de commit com mensagens "arquivo antigo ==> novo arquivo" quando o git encontra uma movimentação de arquivo.

Alternativamente, você pode usar git mv se isso fizer você se sentir mais seguro https://git-scm.com/docs/git-mv

informação relacionada