如何判断给定目录是否是git存储库的一部分?
(以下是在python中,但是bash或其他东西会很好.)
os.path.isdir('.svn')
Run Code Online (Sandbox Code Playgroud)
将告诉您当前目录是否由Subversion控制.Mercurial和Git只在存储库的顶部有一个.hg/.git,所以hg
我可以使用
os.system('hg -q stat 2> /dev/null > /dev/null') == 0)
Run Code Online (Sandbox Code Playgroud)
但git status
如果没有任何改变,则返回非零(错误)退出状态.
正在迭寻寻找.git
自己的道路我能做的最好吗?
fal*_*tro 82
刚发现这个 git help rev-parse
git rev-parse --is-inside-work-tree
Run Code Online (Sandbox Code Playgroud)
true
如果它在工作树中,false
则打印,如果它在'.git'树中,如果它不是,则打印致命错误.'true'和'false'都打印在stdout上,退出状态为0,致命错误打印在stderr上,退出状态为128.
Joh*_*and 43
在ruby中,system('git rev-parse')
如果当前目录在git repo中,则返回true ,否则返回false.我想pythonic等价物应该类似.
编辑:果然:
# in a git repo, running ipython
>>> system('git rev-parse')
0
# not in a git repo
>>> system('git rev-parse')
32768
Run Code Online (Sandbox Code Playgroud)
请注意,当您不在回购中时,STDERR上会有一些输出,如果这对您很重要.
小智 7
有了gitpython
,你可以做这样的功能:
import git
...
def is_git_repo(path):
try:
_ = git.Repo(path).git_dir
return True
except git.exc.InvalidGitRepositoryError:
return False
Run Code Online (Sandbox Code Playgroud)