2016-12-15 7 views
0

新しいリリースをリリースする前に、誰かが自分のファイルを修正したかどうかを確認したいと思います(同僚 - >修正プログラムまたはハッカー - >ハック)。 変更されたファイルをcapistranoのリリースでgit status経由で見ることはできますか?カピストラノリリースで修正されたファイルを確認するにはどうすればよいですか?

$ ls -l 
total 21692 
lrwxrwxrwx 1 user www-data  55 Dec 14 14:31 current -> /path/to/my/releases/20161214132953 
drwxr-xr-x 7 user www-data  4096 Dec 14 14:31 releases 
drwxr-xr-x 7 user www-data  4096 Aug 18 14:05 repo 
-rw-r--r-- 1 user www-data 121235 Dec 14 14:31 revisions.log 
drwxr-xr-x 5 user www-data  4096 Dec 8 2014 shared 
$ cd current 
$ git status 
fatal: Not a git repository (or any of the parent directories): .git 
$ cd ../repo 
$ git status 
fatal: This operation must be run in a work tree 

答えて

2

明らかなことはありませんが、それを行う方法があります。

最初に、tail revisions.logを使用して、リリースに使用されたGit commit SHAを見つけます。

$ tail -n1 revisions.log 
Branch master (at 66ba18ca4f689a7e9fdc9a45ba3c952785620157) deployed as release 20161214132953 by mbrictson 

次に、repoディレクトリに移動し、そのコミット時に存在していたリポジトリの原始的なスナップショットを作成するgit archiveコマンドを使用します。

$ diff -r /tmp/pristine-release /path/to/releases/20161214132953 

あなたは.gitignore経由でファイルを無視する場合は、次のコマンドを使用することができます:

$ mkdir -p /tmp/pristine-release 
$ git archive 66ba18ca4 | tar -x -f - -C /tmp/pristine-release 

今、あなたは違いを見るためにdiffを使用することができます

rsync \ 
    -vanc\ 
    --no-links \ 
    --no-group \ 
    --no-owner \ 
    --no-perms \ 
    --no-times \ 
    --delete \ 
    --filter="dir-merge,- .gitignore" \ 
    /path/to/current/ \ 
    /tmp/pristine-release \ 
    | head -n -3 \ 
    | tail -n +2 \ 
    | grep -v 'skipping non-regular file' 

--filter="dir-merge,- .gitignore"読み取りおよび使用gitignore
| head -n -3 rsync footeを削除します。 R
| tail -n +2
| grep -v 'skipping non-regular file'削除し、リスト

からファイルをスキップrsyncのヘッダを削除
関連する問題