每次将更新发送到我们的远程存储库时,我正在执行一个程序来提醒CruiseControl.我正在使用Git post-update钩子.
如果我能找到已经提交的分支,那将是很好的,所以我可以使用它来通知CruiseControl要构建哪个分支.有没有办法在更新后的钩子中访问分支名称?
有很多相关的问题涉及涂抹/清洁过滤器 - 我花了几个小时阅读它们,并尝试各种选项,但仍然失败.我希望我能以某种方式询问我得到的答案对我有用.
具体来说,我已经阅读了大部分这些答案链接回来的页面:
这是一个详细的问题,但摘要是:
DEBUG = false文件存储在一个分支上,DEBUG = true在另一个分支中,使用涂抹/清除过滤器来管理该文件吗?如何?我在bitbucket有各种远程回购.我在Win8上使用SourceTree,将远程存储库克隆到我的笔记本电脑上.我为开发,功能,发布等创建了不同的分支(遵循一个成功的Git分支模型,无论好坏).
我有一个名为的Android java类Dbug.java,它包含一个布尔值,可以在我的代码中打开/关闭各种调试日志记录,模拟等功能.
public static final boolean DEBUG = false;
Run Code Online (Sandbox Code Playgroud)
我希望这个值false在我的"生产"(主)分支上,并且true在我的功能分支上.
在本地工作,我检查了生产分支.我创建了一个debug_flag.txt使用以下内容调用的测试文件:
// false on production branch
// true on other branches
DEBUG = false;
Run Code Online (Sandbox Code Playgroud)
我在我的本地仓库的根目录中创建了一个文件.gitattributes并添加了过滤器引用:
debug_flag.txt filter=debug_on_off
Run Code Online (Sandbox Code Playgroud)
我.git/config用过滤器定义更新了文件:
[filter "debug_on_off"]
clean = sed -e 's/DEBUG = true/DEBUG = false/'
smudge = sed -s …Run Code Online (Sandbox Code Playgroud) 在维护实时系统时,我发现有时需要对文件进行临时临时更改 - 更改日志记录级别,向脚本添加跟踪选项等.
当我这样做时,我的半自动机制用于查找未提交的更改和未合并的分支通常会显示误报:
通常情况下,所有这些都需要找到尚未合并的更改,但这也意味着"隐藏"临时更改的每种方式也会被阻止.
请注意,我不希望--assume-unchanged,因为同一个文件通常包含临时更改(我不想提醒)和永久更改(我这样做),并查看处理临时更改(不承诺)Git没有提出满足所有这些要求的建议.
使用Mercurial,我会考虑使用Mercurial Queues来获得我想要的东西.我会用我的临时更改创建一个补丁,然后如果我的分析实用程序找到一个补丁队列,它会弹出它们,执行分析然后再推回它们.这将有效地仅删除临时更改,仅对我认为不是临时的更改执行分析,然后重新应用这些更改.
任何更改工作目录的方法的问题在于这会影响实时系统的行为 - 例如,我们的日志记录系统每10秒左右检查一次日志记录配置的更新.
那么,我怎样才能最好地指出git某些变化是暂时的,不应该被提交和/或合并,而其他变化应该?
我有一个明显的印象,我的Git repo以某种方式被破坏了.
这是我正在做的序列:
git clone [remote的克隆字符串]
这创建了一个文件"App/android/AndroidManifest.xml",以及其他许多文件.
git mv App/android/AndroidManifest.xml App/android/AndroidManifestTemplate.xml
这给出了错误消息"致命:不受版本控制,源= App/And ......"
最初我认为这可能是一个gitignore的事情,但那也不是.我试过git fsck,它没有报告任何内容.
有关如何修复它的任何建议?
我想将所有的dotfiles git存储在存储库中,每个机器都有单独的分支.我有一个问题我无法解决阻止我使用git它的目的.我想知道其他人是如何解决它的.
我将有一个单独的master分支,其中只包含模板定义和定义,这些定义和定义应该对所有分支都是通用的,例如:
export EMAIL="@EMAIL@"
export SURFRAW_google_results=1000
Run Code Online (Sandbox Code Playgroud)
我将用@EMAIL@机器分支上的正确电子邮件替换并提交它但SURFRAW_google_results保持不变.例如,在work分支上我会有这样的:
export EMAIL="user@corp.com"
export SURFRAW_google_results=1000
Run Code Online (Sandbox Code Playgroud)
现在,我决定改为SURFRAW_google_results=100010.它应该在全球范围内共享,所以我首先要改变它master:
export EMAIL="@EMAIL@"
export SURFRAW_google_results=10
Run Code Online (Sandbox Code Playgroud)
然后在我的基础work上master:
$ git checkout work
$ git rebase master
Run Code Online (Sandbox Code Playgroud)
现在我遇到了冲突,因为我改变的线上方的线是不同的:
<<<<<<< a60114eea1c98d2354a07bd4fd0cdd63cba62e93
export EMAIL="@EMAIL@"
export SURFRAW_google_results=10
=======
export EMAIL="user@corp.com"
export SURFRAW_google_results=1000
>>>>>>> m
Run Code Online (Sandbox Code Playgroud)
如果bash我可以迅速通过采购机制包括机器特定的部分,但不支持包括/采购其他配置,如.fluxbox/keys或.screenrc?
每当我合并其他团队成员的iOS objc项目时,我都会遇到一些奇怪的冲突:
<<<<<<< HEAD
<rect key="frame" x="254.00000003476939" y="0.0" width="63" height="21"/>
=======
<rect key="frame" x="254.00000010362709" y="0.0" width="63" height="21"/>
>>>>>>> XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Run Code Online (Sandbox Code Playgroud)
我们永远不会改变x的值,我们总是给出像值一样的整数.显然,Xcode会自动更改该值.如何防止这种事情发生?
git中是否有一种方法可以在git update-index --assume-unchanged FILE_NAME给定的文件集上默认获得结果?例如,一个git config文件列出了默认情况下不会跟踪其更改的文件,这样在克隆存储库后就不必运行命令了吗?这些文件将以默认格式存在于存储库中,由开发人员提取,并且他们对文件所做的任何更改都不会被跟踪或跟踪提取。
例如:我有一个带占位符的web.config文件,该占位符用于项目使用的连接字符串。理想情况下,开发人员将克隆存储库,并用指向其本地资源的连接字符串替换这些占位符。无需运行任何命令。这样,这些更改将保留在后拉中,除非在仓库中更改了web.config文件的格式,并且它们的本地更改不会被推送到仓库中。
使用配置文件可以在git中实现吗?还是我总是必须为“假设文件集不变”运行命令?
我们最近开始git-flow在我们公司使用,我们遇到了以下问题:
我们有一个DEV_MODE布尔值来控制应用程序中的日志记录级别,我们希望开发分支始终具有DEV_MODE=true.
但是,在发布版本时,我们将更DEV_MODE改为false.
当我完成发布时git-flow,它会合并DEV_MODE=false到开发分支中.
我有一个钩子,我可以用来防止这种情况,或者可能告诉git如何合并发布分支中的文件以进行开发?