git 正在从以前的标记版本中提取文件

pieyvz9o  于 2023-02-28  发布在  Git
关注(0)|答案(1)|浏览(133)

我想从最后标记的版本中提取文件:

  • 如果当前头是标记版本,则取前一个
  • 否则,采用最后标记的版本。

我正在做这样的事情:

#!/bin/bash    
newtag=`git name-rev --tags --name-only $(git rev-parse HEAD) | sed 's|\([^\^]*\)\(\^0\)$|\1|g'`
if [[ "$newtag" == undefined ]];then
    # then the current version has no tag
    newtag=`git describe`
    oldtag=`git tag --list | sort -V | tail -n1`
else
    oldtag=`git tag --list | sort -V | tail -n2 | head -n1`
fi
# Now go grab the previous file : 
git stash
git checkout $oldtag --recurse-submodules
file=`latexpand paper.tex`
git checkout $newtag --recurse-submodules
echo "$file" > oldpaper.tex
git stash pop

有没有一种方法可以更干净地做到这一点?我敢肯定,我所做的,以找出正确的标签去是次优...
而且,现在获取文件也有点笨重。问题是我需要运行latexexpand paper.tex才能从repo的旧版本中获取文件,它还不在那里。因此,我需要 checkout 旧版本(并隐藏我目前必须这样做的)。是“有没有办法让git在oldtag版本的状态下运行一个命令,然后给予我更干净的输出?

mwkjh3gx

mwkjh3gx1#

有没有更干净的方法?
这听起来像是您最好添加一个额外的worktree,您只需运行latexpand paper.tex,然后让脚本获取另一个工作树的头(例如git worktree list | awk '/the_other_worktree/{ print $2 }')而不是git rev-parse HEAD
这样,您可以在主工作树中修改文件,而不会影响第二个工作树。
额外的好处是:你可以将它设置为test,并且在分支的每次提交时都使用run automatically
PS你应该认真尝试stop using stash,而不是使用temporary, normal commits和/或临时分支。

相关问题