假设我通过git存储库与某人合作,并且有一个特定的文件,我永远不想接受任何外部更改.
有没有办法让我设置我的本地仓库,以便每当我拉动时不抱怨冲突的合并?我想在合并此文件时始终选择我的本地版本.
我有以下目录结构:
/.git
/.git/info/attributes
/MyProject
/MyProject/pom.xml
/MyProject/MyCode.java
Run Code Online (Sandbox Code Playgroud)
我有分支主和bugfix.在两个分支上都修改了pom.xml和MyCode.java.我想将仅来自bugfix的更改合并到MyCode.java的master,并保留pom.xml文件的主版本.
所以我添加了"/.git/info/attributes"因为我不想在项目中提交.gitattributes
$cat .git/info/attributes
pom.xml merge=ours
$git status
# On branch master
nothing to commit (working directory clean)
$git check-attr -a pom.xml
pom.xml: merge: ours
Run Code Online (Sandbox Code Playgroud)
最后到了问题:
当我做:
$git merge bugfix
Auto-merging MyProject/pom.xml
CONFLICT (content): Merge conflict in MyProject/pom.xml
Automatic merge failed; fix conflicts and then commit the result.
Run Code Online (Sandbox Code Playgroud)
Git忽略了属性设置.我在这里失踪了什么?
我不想在这篇文章中定义"keepMine.sh"
这篇文章是我需要的,但是如果我有一个简单的模式,我宁愿不逐个文件
谢谢!
git merge使用以下选项执行a 时:
git merge -X theirs master
偶尔会有冲突的文件:
CONFLICT(修改/删除):在master中删除File_A.java并在HEAD中修改.File_A.java的版本HEAD留在树中.
但是,我希望-X theirs在这些情况下识别该选项,并使用theirs更改的版本,该版本用于删除该文件.
是否有原因导致此类冲突无法自动解决,特别是因为我提供了一个特定的合并策略,建议它应该删除该文件?
此外,如何(如果可能)我可以更新我的merge命令以使用theirs此类冲突的版本?
有很多相关的问题涉及涂抹/清洁过滤器 - 我花了几个小时阅读它们,并尝试各种选项,但仍然失败.我希望我能以某种方式询问我得到的答案对我有用.
具体来说,我已经阅读了大部分这些答案链接回来的页面:
这是一个详细的问题,但摘要是:
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) 我刚刚尝试过第一次使用.gitattributes.我认为我必须做错事,因为它没有工作,因为我认为使用merge=ours属性的目的是为了(?).
我用法的一个例子:
我有两个分支; 一个是"主人",另一个是"GCE-Site"."GCE-Site"分支上的文件具有不同的设置,这些设置也存在于"master"分支上,我不想合并到"master"[或其他分支].
在这两个分支上,我有一个.gitattributes包含以下规则:
README.md merge=ours
config.php merge=ours
.gitattributes merge=ours
.gitignore merge=ours
.cache/ merge=ours
Run Code Online (Sandbox Code Playgroud)
需要规则的所有文件都在根级别加上.cache /文件夹上的所有内容.当我这样做时git merge GCE-Site,所有文件仍然在我不想要的时候合并到主服务器中.
有什么我想念的吗?非常感谢您的帮助.日Thnx
我有以下目录结构:
project/
.git/
...
app/
...
config/
initializers/
braintree.rb
environments/
production.rb
.gitattributes
Run Code Online (Sandbox Code Playgroud)
我的项目使用两个主要分支,主分支和分段,每个分支跟踪不同的远程(生产和暂存heroku应用程序).
我们的想法是,分段分支随着新功能向前移动,它们被推送到临时远程控制台并进行测试,然后快速转发主分区以匹配分段并推送到生产远程.
这就是我想要做的事情:自由合并这两个分支,同时保持它们的版本braintree.rb和production.rb分离.
为了实现这一点,这里是我提出的.gitattributes(根据ProGit书):
config/initializers/braintree.rb merge=ours
config/environments/production.rb merge=ours
Run Code Online (Sandbox Code Playgroud)
该文件存在于两个分支中.
我遇到的问题是,这似乎对任何事情没有任何影响.每当我在两者之间合并时,无论如何文件都会被更改,我必须再次更改它们.
我有一种感觉,我错过了一些非常明显的东西,但到目前为止它正在逃避我.我知道其他答案涉及创建自定义合并驱动程序,但ProGit书中没有提到这个过程,似乎暗示ours驱动程序是内置的(我已经在手册页中看到过它,所以我是相对确定它是).我能想到的另一件事就是我以某种方式放.gitattributes错了地方或弄乱了它的内容,但我找不到太多关于此的信息.我已经尝试将它移动到与文件相同的目录,但无济于事.
如果它有任何帮助,我在OS X上运行git版本1.7.2.任何帮助将不胜感激.
我尝试将合并策略添加到我的存储库中的.gitattributes文件中.但是当我将另一个分支与该(不同的)文件合并时,会导致合并冲突 - 自动合并失败.
这是我尝试做的事情.
.gitattributes:
backend/library/project/config.php merge=ours
Run Code Online (Sandbox Code Playgroud)
分行:
在生产中我有config.php'A,并在分阶段我有config.php'B.
> git checkout production
> git merge staging
> Auto-merging backend/library/project/config.php
> CONFLICT (content): Merge conflict in backend/library/project/config.php
> Automatic merge failed; fix conflicts and then commit the result.
Run Code Online (Sandbox Code Playgroud)
我尝试将行添加到.git/info/attributes以及向.merge ="ours"添加引号.
有谁知道我做错了什么?(Git-version是1.7.4.4)thx