英文:
how to check diff of a file compared to the previous commit on github action
问题
我有一个存储时间戳的文件。
为了检查该文件是否与先前的提交有所更改,我只需在本地运行 git diff
,然后解析输出:
git diff --word-diff=porcelain HEAD~1 -- dev/tests/artifact_build_timestamp.info > /tmp/timestamp-diff.txt || exit 2;
即使在工作目录中有一个新的未提交的时间戳,这也是有用的。
但是:在 GitHub Actions 中,这是不可能的。在检出时,它处于分离模式,我无法与 HEAD~1 进行比较:
通过使用 actions/checkout@v3
操作,它执行以下操作(我希望它执行)。为了获得完整的历史记录,我设置了 fetch-depth: 0
Checking out the ref
/usr/bin/git checkout --progress --force refs/remotes/pull/4/merge
Note: switching to 'refs/remotes/pull/4/merge'.
我想知道与其先前的提交进行比较的最佳方法是什么。我有一个想法:
if [[ ! -z "$CI" ]]; then
BRANCH_NAME=${GITHUB_HEAD_REF}
git pull origin ${BRANCH_NAME} || exit 1;
git diff --word-diff=porcelain origin/${BRANCH_NAME}~1 origin/${BRANCH_NAME} -- dev/tests/artifact_build_timestamp.info > /tmp/timestamp-diff.txt || exit 2;
fi
但我不知道在任何情况下运行操作是否安全,甚至是否有更好的方法。
英文:
I have a file with a timestamp stored in it.
In order to check if that file has changed compared to the previous commit, I simply git diff
on local, and then I parse the output:
git diff --word-diff=porcelain HEAD~1 -- dev/tests/artifact_build_timestamp.info > /tmp/timestamp-diff.txt || exit 2;
This is useful even when I have a new uncommited timestamp on the WD too.
But: on github actions this is not possible. When checking out, it is in detached mode and I can't compare against HEAD~1:
By using the actions/checkout@v3
action this is what it performs (and I want it to perform). In order to have the full history I set the fetch-depth: 0
Checking out the ref
/usr/bin/git checkout --progress --force refs/remotes/pull/4/merge
Note: switching to 'refs/remotes/pull/4/merge'.
I'm wondering what's the best way to compare against its previous commit. An idea I have is:
if [[ ! -z "$CI" ]]; then
BRANCH_NAME=${GITHUB_HEAD_REF}
git pull origin ${BRANCH_NAME} || exit 1;
git diff --word-diff=porcelain origin/${BRANCH_NAME}~1 origin/${BRANCH_NAME} -- dev/tests/artifact_build_timestamp.info > /tmp/timestamp-diff.txt || exit 2;
fi
But I don't know if it's safe on any case an action could be run, or even if there is a better way.
答案1
得分: 2
默认情况下,actions/checkout
只会检出一个提交,使得检出是浅层的。
如果你想要额外检出一个(之前的)提交,将 fetch-depth
输入设置为 1
:
- uses: actions/checkout@v2
with:
fetch-depth: 1
如果你想要整个历史记录(所有提交),将 fetch-depth
输入设置为 0
:
- uses: actions/checkout@v2
with:
fetch-depth: 0
请参考文档。
当进行检出时,它处于分离状态
这是无关紧要的。无论是分离的 HEAD
还是在分支上 — 如果你有两个提交,你可以运行 git diff HEAD~
。如果你只有一个提交,你不能运行 — 因为没有 HEAD~
。
英文:
By default actions/checkout
only checks out a single commit, making the checkout shallow.
If you want one additional (previous) commit set the fetch-depth
input to 1
:
- uses: actions/checkout@v2
with:
fetch-depth: 1
If you want the entire history (all commits) set the fetch-depth
input to 0
:
- uses: actions/checkout@v2
with:
fetch-depth: 0
See the docs.
> When checking out, it is in detached mode
That's irrelevant. Detached HEAD
or on branch — if you have 2 commits you can run git diff HEAD~
. If you only have 1 commit you cannot — there is no HEAD~
.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论