Git chmod problema: Checkout bits de exec de parafusos

9

No Ubuntu e no Debian, os últimos arquivos confirmados estão recebendo o bit de execução, quando eu testar o checkout depois. É muito estranho e me deixa louco:

$ ls -l file
-rw-r--r-- ... file

# on branch master:
$ git commit -m 'mode is 644' file
[master 0123456] mode is 644
 1 files changed, 1 insertions(+), 1 deletions(-)
# All ok

$ git checkout dev-branch
Switched to branch 'dev-branch'
# Seemingly all ok, but file now has the exec bit set

$ git merge master
Updating 6543210..0123456
error: Your local changes to 'file' would be overwritten by merge.  Aborting.
Please, commit your changes or stash them before you can merge.
# Oops...

$ ls -l file
-rwxr-xr-x ... file

Alguém tem uma ideia, quando e por que a execução se encaixa? core.filemode está definido como true .

Eu tenho o arquivo aberto no vim durante a alternância de filiais, se isso for importante de alguma forma.

Adendo 1: É o checkout, onde as permissões estão erradas. Eu posso jogar o jogo sem parar:

$ git br
* master
  dev-branch

$ git diff
diff --git a/file b/file
old mode 100644
new mode 100755

$ chmod 644 file

$ git diff

$ git checkout dev-branch

$ git diff
diff --git a/file b/file
old mode 100644
new mode 100755

$ chmod 644 file

$ git diff

$ git checkout master

$ git diff
diff --git a/file b/file
old mode 100644
new mode 100755

# ...and so on ad inf.

Adendo 2: Isso acontece, a propósito, para cada arquivo neste repositório que eu confirmo. Após o commit bem-sucedido, não consigo trocar de ramificação sem a permissão perplexo.

    
por Boldewyn 29.10.2010 / 14:04

4 respostas

11

Não é um usuário do Git, mas acredito que o Git armazena toda a máscara de permissão de arquivos.

Isso significa que você definiu o arquivo como executável, o qual o Git selecionou e replicou no repositório. Portanto, você deve alterar a máscara de permissão do arquivo antes de confirmar.

Para fazer com que o Git ignore tais mudanças, use

git config core.filemode false

De git-config (1) :

   core.fileMode
       If false, the executable bit differences between the index and the
       working copy are ignored; useful on broken filesystems like FAT.
       See git-update-index(1). True by default.
    
por 05.11.2010 / 08:14
3

Você verificou se há um gancho personalizado que é executado durante a confirmação ou a finalização da compra? Pode haver alguns ganchos personalizados alterando seus arquivos. Finalize a manpage do githooks .

Ganchos são basicamente pequenos programas chamados pelo git em certos eventos (commit, checkout etc.).

    
por 06.11.2010 / 12:55
1

você tentou git commit -m 'modo é 644' arquivo no branch dev-branch

para mim, parece que o que está acontecendo é que você está alterando as permissões no main e, em seguida, removendo o branch de desenvolvimento que tem a permissão errada, obtendo sua permissão local. em seguida, tentando se comprometer novamente. clonar, alterar, consolidar, mesclar; ou tente alterar o arquivo individualmente com um único arquivo commit into dev then merge

    
por 05.11.2010 / 14:45
1

Há boas respostas nesses links.

link

e

link

Essencialmente, você precisa de git update-index --chmod=(+|-)x <file> e isso adicionará uma alteração que você precisará confirmar e enviar para que as permissões sejam adicionadas / removidas.

    
por 23.10.2015 / 21:54

Tags