我想保留(现在)能够将Git变更集链接到存储在TFS中的工作项.
我已经编写了一个工具(使用Git中的一个钩子),我可以在其中将workitemidentifiers注入到Git变更集的消息中.
但是,我还想将Git提交的标识符(哈希)存储到自定义TFS工作项字段中.通过这种方式,我可以检查TFS中的工作项,并查看与工作项相关联的Git更改集.
如何从Git的当前提交中轻松检索哈希?
在Makefile中,如果存在未提交的更改(在工作树或索引中),我想执行某些操作.什么是最干净,最有效的方法?退出的命令在一种情况下返回值为零而在另一种情况下为非零符合我的目的.
我可以运行git status
并输出输出grep
,但我觉得必须有更好的方法.
我正在尝试编写一个可以执行的结构脚本git commit
; 但是,如果没有提交,git退出状态为1
.部署脚本将其视为不成功,并退出.我确实想要检测实际的失败提交,所以我不能仅仅给织物一个忽略git commit
失败的问题.如何允许忽略空提交失败,以便部署可以继续,但仍然捕获真正提交失败时导致的错误?
def commit():
local("git add -p && git commit")
Run Code Online (Sandbox Code Playgroud) 除非我的工作目录是干净的,否则我不希望Archive构建成功.因此,我想在我的Xcode项目中添加一个"运行脚本"构建阶段(或类似的东西),这样:
如果我正在执行存档构建...
并且我的源目录中有未提交的更改
然后构建失败并出现错误.
我正在使用Xcode 4和git 1.7.
什么是一个好的,简洁的,可重用的脚本,可以完成这项工作?
之前的一个问题产生了一些关于如何检查你的Git repo是否包含脏索引或未跟踪文件的想法.我从讨论中得出的答案如下:
#!/bin/sh
exit $(git status --porcelain | wc -l)
Run Code Online (Sandbox Code Playgroud)
这个答案背后的想法是模仿程序员会做什么:运行git status
然后检查输出.
不幸的是git status --porcelain
,git status
并没有完全相同的事情.特别是,git status
将报告未按下的更改,而git status --porcelain
不会.这是一个例子
[jarmo@localhost math-hl]$ git status --porcelain
[jarmo@localhost math-hl]$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
# (use "git push" to publish your local commits)
#
nothing to commit, working directory clean
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:我需要添加到原始脚本中以确定何时repo已经未按下更改?特别是,这是一种正确的方法吗?
#!/bin/bash
if [ $(git status --porcelain | wc -l) != …
Run Code Online (Sandbox Code Playgroud) 如果我的 git 目录更改,我有一个 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)'
Run Code Online (Sandbox Code Playgroud)
这工作正常!但问题是在某些工作目录中非常慢,因为存在许多变化和很大的差异。
在没有完整的情况下获得 git status boolean (yes changed or no changed) 的更好方法是什么?
我试过git status --short …
如果您在没有更改的情况下有提交语句,那么它将返回退出代码 1,这将导致 GitHub 工作流失败。
作为解决方法,我尝试修改此SO 帖子以及此答案中的解决方案,该答案基本上是使用 -
git diff-index --quiet HEAD
Run Code Online (Sandbox Code Playgroud)
在我当地的 bash 上,它按预期工作。当我运行时echo "$?"
,输出 1 或 0 符合我的预期。
基于该文档和有关在 GitHub 工作流程中设置环境变量的文档,我的工作流程文件中有以下内容 -
git diff-index --quiet HEAD
Run Code Online (Sandbox Code Playgroud)
但是,每当有要提交或跟踪的更改时,环境变量changes_exist就会发生变化false
,反之亦然。
这与我的期望恰恰相反。
作为一种解决方法,直到我弄清楚这一点,我使用以下在工作人员中完美运行的方法 -
git diff-index --quiet HEAD || git commit -m "updating datasets"
Run Code Online (Sandbox Code Playgroud)
知道为什么上面的方法有效,而使用的if - then - else
行为与它应该的相反吗?