我来自Subversion背景,当我有一个分支时,我知道我正在处理的是"这些工作文件指向这个分支".
但是对于Git,我不确定我何时在NetBeans或Notepad ++中编辑文件,无论它是与主服务器还是其他分支相关联.
git在bash中没有问题,它告诉我我在做什么.
在Unix或GNU脚本环境(例如Linux发行版,Cygwin,OSX)中,确定当前在工作目录中检出哪个Git分支的最佳方法是什么?
这种技术的一个用途是自动标记一个版本(就像svnversionSubversion一样).
另请参阅我的相关问题:如何以编程方式确定Git结帐是否为标签,如果是,那么标签名称是什么?
我是shell脚本的新手,无法解决这个问题.如果您不熟悉,命令git branch会返回类似的内容
* develop
master
Run Code Online (Sandbox Code Playgroud)
,星号标记当前签出的分支.当我在终端中运行以下内容时:
git branch | grep "*"
Run Code Online (Sandbox Code Playgroud)
我明白了:
* develop
Run Code Online (Sandbox Code Playgroud)
正如所料.
但是,当我跑
test=$(git branch | grep "*")
Run Code Online (Sandbox Code Playgroud)
要么
test=`git branch | grep "*"`
Run Code Online (Sandbox Code Playgroud)
然后
echo $test
Run Code Online (Sandbox Code Playgroud)
,结果只是目录中的文件列表.我们如何使test ="*develop"的价值?
然后下一步(一旦我们将"*develop"变成一个名为test的变量),就是得到子串.这只是以下几点吗?
currentBranch=${test:2}
Run Code Online (Sandbox Code Playgroud)
我正在玩那个子串函数,我得到了很多"坏替换"错误,不知道为什么.
如何获取工作副本的当前分支或标记名称?我已经看到指示rev-parse --abbrev-ref HEAD将给出分支名称的引用,但是如果checkout是标记,则这不起作用,在这种情况下它只返回'HEAD'.我需要以某种方式获取这些修订的标记名称.
要清楚,我想要两个可能的名字之一:
从文档中的示例subprocess.run()来看,似乎不应该有任何输出
subprocess.run(["ls", "-l"]) # doesn't capture output
Run Code Online (Sandbox Code Playgroud)
但是,当我在python shell中尝试它时,列表被打印出来.我想知道这是否是默认行为以及如何抑制输出run().
git ×4
bash ×2
branch ×2
git-branch ×2
shell ×2
git-checkout ×1
linux ×1
python ×1
python-3.x ×1
subprocess ×1
ubuntu ×1