获取没有慢速diff列表的git status boolean

时间:2016-02-13 01:54:30

标签: git

如果我的git dir被更改,我有一个bash PS1获得红色,如果没有更改,我有一个绿色。

if [ $? -eq 0 ]; then \ echo "$(echo `git status` | grep "nothing to commit" > /dev/null 2>&1; \ if [ "$?" -eq "0" ]; then \ # @4 - Clean repository - nothing to commit echo "\n'$Green'"$(__git_ps1 "(%s)"'$Color_Off'); \ else \ # @5 - Changes to working tree echo "\n'$IRed'"$(__git_ps1 "(%s)"'$Color_Off'); \ fi)\$ "; \ fi)'

这项工作很好! 但问题是,在某些工作中,dir非常慢,因为存在许多变化和很大的差异。

如果没有完整的

,获取git status boolean(是更改或不更改)的更好方法是什么

我尝试使用git status --shortgit status --porcelain,但速度很慢。

2 个答案:

答案 0 :(得分:2)

也许这个答案可能有用:https://stackoverflow.com/a/2659808/3903076

简而言之,您可以根据需要调整以下检查。有关详细信息,请参阅链接的答案。

if ! git diff-index --quiet --cached HEAD; then
  # Index has changes.
  exit 1;
elif ! git diff-files --quiet; then
  # Working tree has changes.
  exit 1;
elif [ -n "`git ls-files --others --exclude-standard`" ]; then
  # There are untracked unignored files.
  exit 1;
fi

答案 1 :(得分:0)

我在这里找到答案:https://gist.github.com/sindresorhus/3898739 def upload_location(filename): return "media/images/dp/{}".format(filename) class Profile(models.Model): first_name = models.CharField(max_length=30) last_name = models.CharField(max_length=30,blank=True) dp = models.ImageField(upload_to=upload_location', null=True, blank=True) @property def default_picture(self): if self.dp: return "{}{}".format(settings.MEDIA_URL, self.dp) return '/media/images/dp/default.jpg'

这个速度非常快但是如果你有一个未跟踪的文件,你将有一个git diff --quiet --ignore-submodules HEAD 2>/dev/null布尔值,但对我来说很好。

changed==0