실행 파일 플래그가 파일에서 제거된 이유를 추적할 수 있는 방법이 있습니까?

실행 파일 플래그가 파일에서 제거된 이유를 추적할 수 있는 방법이 있습니까?

나는 git Hooks 세트를 가지고 있다계속해서실행 가능 플래그를 제거하십시오. 나는 그것이 무엇을 할 수 있을지 전혀 모르지만, 지금까지 문제를 어느 정도 완화할 수 있는 유일한 방법은 chmod +x ~/.git_template/hooks/*.bashrc파일에 있다는 것입니다(컴퓨터를 다시 시작하면 거의 항상 사라집니다). 이것을 내 기능에 넣는 것 외에는 아이디어가 부족 PS1하고 내 특정 설정과 관련된 것이 이 문제를 일으키는지 또는 어떤 프로세스가 이 문제를 일으키는지 알아낼 수 있는 방법이 있는지 궁금합니다.

내 모든 git 저장소는 내가 사용하는 후크 디렉토리에 대한 심볼릭 링크만 포함하는 템플릿을 기반으로 생성됩니다 ~/.git_template(그래서 모두 최신 버전을 사용합니다). 완전히 간단하지는 않을 수도 있지만 (솔직히) 혼란스러운 동작을 유발할 수 있는 내용은 없습니다.

편집: 실제로 새 후크( post-checkout)를 추가한 이후 모든 후크에 대한 실행 권한이 제거된 것을 확인했습니다.매번후크가 실행됩니다(적어도 지금까지는). 이것이 관련될 수 있는 경우를 대비하여 여기에 전체 git 후크를 붙여넣겠습니다.

#!/usr/bin/env node

var spawn = require('child_process').spawn;

var providedArguments = process.argv.slice(2)
var previousHead = providedArguments[0];
var newHead = providedArguments[1];

var changed = false;
var git = spawn('git', ['diff', previousHead, newHead, '--stat', '--', 'package.json']);
git.stdout.on('data', function(data) {
    changed = true;
});
git.on('exit', function() {
    if (changed) {
        console.log('package.json changed. Running npm install');
        spawn('npm', ['install'], { stdio: 'inherit' });
    }
});

답변1

Linux가 아닌 경우(예: Solaris, HP/UX, OS/X...) strace -fo strace.log시스템에서 또는 이에 상응하는 명령을 실행하여 (결국) 후크를 호출합니다.trusstuscdtruss

그런 다음 에서 (또는 또는 ...)이 수행하는 작업을 strace.log확인 하고 s의 단서를 따라 파일 권한이 수정된 원인을 확인할 수 있습니다.chmod()fchmod()fchmodat()execve()

관련 정보