我想从最后标记的版本中提取文件:
- 如果当前头是标记版本,则取前一个
- 否则,采用最后标记的版本。
我正在做这样的事情:
#!/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
版本的状态下运行一个命令,然后给予我更干净的输出?
1条答案
按热度按时间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和/或临时分支。