What's an easy way to detect modified files in a Git workspace?

前端 未结 5 1236
别那么骄傲
别那么骄傲 2021-01-01 09:04

During make, I create string fields which I embedded in the linked output. Very useful.

Other than a complex sed/grep parsing of the

相关标签:
5条回答
  • 2021-01-01 09:16

    For git hooks, I found this command useful

    git diff-index --exit-code --ignore-submodules HEAD
    

    For example

    //run some static analysis check that can change the code
    something_changed=`git diff-index --exit-code --ignore-submodules HEAD`
    if [ -n "$something_changed" ]
    then
        echo >&2 "Something changed in $local_ref, not pushing"
        exit 1
    fi
    
    0 讨论(0)
  • 2021-01-01 09:27

    git ls-files -m

    To find this you could have browsed through git help -a.

    0 讨论(0)
  • 2021-01-01 09:27

    git status --porcelain seems to give a nice parsable output.

    0 讨论(0)
  • 2021-01-01 09:27

    git diff --name-only does the same (might be more intuitive...)

    0 讨论(0)
  • 2021-01-01 09:28

    If you just want a plain “Are there any differences from HEAD?”:

    git diff-index --quiet HEAD
    

    If the exit code is 0, then there were no differences.

    If you want “What files have changed from HEAD?”:

    git diff-index --name-only HEAD
    

    If you want “What files have changed from HEAD, and in what ways have they changed (added, deleted, changed)?”:

    git diff-index --name-status HEAD
    

    Add -M (and -C) if you want rename (and copy) detection.

    These commands will check both the staged contents (what is in the index) and the files in the working tree. Alternatives like git ls-files -m will only check the working tree against the index (i.e. they will disregard any staged (but uncommitted) content that is also in the working tree).

    0 讨论(0)
提交回复
热议问题