如果我的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 --short
或git status --porcelain
,但速度很慢。
答案 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