2015-01-30 7 views
15

체크 아웃 작업을 시작할 때 git은 무엇을합니까? 자물쇠 파일을 쓰거나 뭔가를 쓰나요?git 체크 아웃이 완료 될 때까지 파일 감시자를 잠급니다.

나는 꿀꺽 꿀꺽 거리는 소리를 사용하며, 적극적으로 계산 작업을 수행하는 경우에는 감시자를 "일시 중지"하고 싶습니다.

나는 파일 감시자를 다시 장비에 넣을 때 "다시 저장"해야 할 수도 있습니다.

답변

6

gulp.watch() 함수는 end() 메서드를 호출 할 수있는 객체를 반환합니다. glob-watcher 모듈의 정의를 참조하십시오. 우리가보고 시작하면

Gist with this code here

var gulp = require('gulp'); 

function doGitCheckout(callback) { 
    console.log('doing checkout...'); 
    setTimeout(function() { 
    console.log('done checkout...'); 
    callback(); 
    }, 1000); 
} 

var watcher; 

gulp.task('watch:start', function() { 
    if (!watcher) { 
    watcher = gulp.watch('dist/**/*', ['build']); 
    console.log('started watcher'); 
    } 
}); 

gulp.task('watch:stop', function() { 
    if (watcher) { 
    watcher.end(); 
    watcher = null; 
    console.log('stopped watcher'); 
    } 
}); 


gulp.task('git:checkout', ['watch:stop'], function(cb) { 
    console.log('isWatching = ' + !!watcher); 

    // Start the Git checkout... 
    doGitCheckout(function() { 
    // The Git checkout is finished! 
    gulp.start('watch:start', function() { 
     cb(); 
    }); 
    }); 
}); 

gulp.task('default', ['watch:start', 'git:checkout']); 
그래서 우리는 감시자 개체에 대한 참조를 유지하고 실행하면 감시자를 중지하는 작업이 있습니다

이러한 라인을 따라 뭔가를 할 수 있습니다. Git 작업은 시작하려면 watch:stop에 의존하고 완료되면 콜백으로 Git 체크 아웃을 시작합니다. 콜백은 watch:start 작업을 시작하고 완료되면 cb 함수를 트리거하여 git:checkout이 완료되었음을 나타냅니다.

시계 개체에서 add(pattern)remove(pattern)을 사용하여 개체를 파괴하고 다시 만드는 대신 해제하고 다시 켤 수도 있습니다.

+0

멋진 소식! 나는 꿀꺽 꿀꺽 새기 스크립트에서 자식을 걷어차 고 있지는 않다. ... git checkout은 작업 카피 파일을 다시 쓰고 있기 때문에 gulp 전문가는 gulp 작업을 시작합니다. git checkout이 활성화되어 있는지 (예 : .git/checkout.lock 파일이 존재하거나 유사하므로) 확인하고 git checkout이 다시 작성 될 때까지 일시적으로 작업을 실행하지 못하도록하는 방법을 찾고 있습니다. 작업 카피 – enorl76

+0

자물쇠 파일 메커니즘이 있습니다 - 기술 정보는 [이 문서] (https://github.com/git/git/blob/master/Documentation/technical/api-lockfile.txt)를보십시오. 그러나 Git은 기본 작업에 잠금 파일을 사용하지 않고 마치'git rebase '와 같은 더 긴 작업에만 사용되는 것처럼 보입니다. 또한 일관된 상태를 유지해야하기 때문에 읽기 작업을 중지하지 않습니다. – spiralx

+0

Git 프로세스를 제어 할 수 있다면 Gulp 감시자가 소켓에서 수신 대기하고 "일시 중지"및 "다시 시작"메시지를 받아 들일 수 있습니다. 당신은 힘내 과정 전에 일시 중지를 보낼 수 있고, 그것이 끝나면 재개한다. – spiralx