对于将绝对路径和数据库凭证硬编码到Web应用程序中的多个随机位置的人来说,地狱中有一个特殊的地方.可悲的是,在他们下地狱之前,他们正在对地球造成严重破坏.我们必须处理他们的代码.
我必须对其中一个这样的Web应用程序执行一些小的更改.我创建了一个新分支features,并执行全局查找和替换以更新本地环境的路径和凭据.我承诺了.我也把它标记为local.
我快乐地陷入危险的黑客攻击,经过一百个令人困惑的补丁之后,我想将我的features更改合并到master分支中,但我不希望将一个local提交合并.
开始,我将合并来回之间master和features,我想local留在原地的features,并且永远不会显示在master.
理想情况下,我希望所有这一切都神奇地发生,尽可能少有趣的参数.
是否有一种简单明显的方法可以让我失踪?
我能想到一对,但他们都要求我记住我不想要那个提交.这绝对不是我的强项.特别是对于如此糟糕的黑客程序.
如果做不到这一点,我对处理这种情况的更复杂,手动的方法感兴趣.
我已经做了大量的搜索,阅读了很多SO问题和解决方案并尝试了不同的方式,但我一直无法做我想做的事,这很简单.
我有所有主代码所在的主分支,以及设计分支,其中rails应用程序的布局由设计团队构建.他们在公共文件夹中添加了一个名为"photoshop"的文件夹,以便在版本控制下保留图像的来源.但我不希望在合并到主分支时复制此文件夹,因为它是不需要的.
显然,这样做的方法是通过合并驱动程序.所以,我创建了"忽略"驱动程序:
[merge "ignore"]
name = always ignore during merge
driver = ignore.sh %0 %A %B
Run Code Online (Sandbox Code Playgroud)
并在$ PATH上创建了ignore.sh文件:
exit 0
Run Code Online (Sandbox Code Playgroud)
我在public /中创建了.gitattributes文件,因为photoshop文件夹应该整体被忽略,它将出现在public /下:
photoshop merge=ignore
photoshop/ merge=ignore
photoshop/* merge=ignore
photoshop/**/* merge=ignore
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我尝试了几种不同的模式来忽略整个文件夹,但它不起作用.我相信这是因为master分支上没有文件夹,所以没有冲突,因此git不使用ignore驱动程序.有没有办法实现这一点,而无需在master上创建public/photoshop文件夹?
谢谢!
我试图在一个存储库中保留2个网站项目.除了模板(html,css)文件和少量配置文件外,这些网站主要是相同的.主站点(我说是Supersite)是分支机构的主人.第二个站点位于分支secondarySite中.每当我在master分支中开发一些新功能时,我想将它合并到secondarySite,但我想从合并中排除模板文件.
我在这里找到了部分解决方案如何告诉git始终为特定文件上的冲突合并选择我的本地版本?但它只有在我更改两个分支中的模板文件并且发生冲突时才有效.当没有冲突时,git只使用较新的远程版本的文件.
即使没有冲突,我如何告诉git 始终保持指定的本地文件不变.
或者我可能使用完全错误的方法解决问题?
在此先感谢您的帮助.
我有许多远程存储库,我想合并在一起.这些存储库中的一些子树对于远程控制器是唯一的(它们包含特定于主机的数据),其他子树包含在所有远程控制器中通用的数据(应该是).
基本上,我想做的是为每个遥控器运行"git pull".这将使远程主服务器的跟踪分支上的本地主分支快速转发到远程主服务器上已更改的特定于主机的文件,并且对公共文件不执行任何操作,因为它们不会更改.
公共文件中的更改(称为F,更改为F')应该不是问题,即使它最初只发生在一个远程上.git-merge将做正确的事情并在我的复合工作区中给我一个F'的副本,这就是我想要的.如果同一个公共文件在另一个遥控器上以不同的方式改变(称之为F"),问题就出现了.git-merge将给我一个F'和F"的组合,这不是我想要的.我想要的只是F".
当我使用ClearCase时,我们将其称为复制合并.合并的结果始终是贡献者的精确副本.这听起来很像"git merge -s theirs",但它不存在.
我想知道我是否可以通过"git-read-tree -m -trivial"来做一些事情来快速合并,然后用git-merge和一个自定义合并工具来简单地复制$ REMOTE文件到$ MERGED.但即便如此,我也看不出如何从合成F'和F中停止git-merge,如果合并是微不足道的话.
我已阅读链接是否有"他们的"版本的"git merge -s ours"?在这个网站上,Junio Hamano的帖子引用了解释为什么"git merge -s theirs"是一个坏主意,但对我来说情况并非如此.我确实重视旧的历史,但我需要跳出船并在发生事件时跟踪远程站点上的更改.本地站点上没有新工作.它只需要形成所有远程站点的组合,在更改时从最后一个轮询的远程站点获取最新的"公共"文件.
在此先感谢您提供给我的任何帮助.
我刚刚尝试过第一次使用.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
我有一个问题,从master到我的一个存储库中的'deploy'分支.
我的回购设置如下:
master - of course, the main branch
deploy - a branch created where files like Capfile, deploy.rb etc are created and configured - these changes will NEVER be merged back into Master
Run Code Online (Sandbox Code Playgroud)
通常我的工作流程是:
deploy分支git rebase master在部门分支上执行- 这曾经没有问题cap deploy我现在遇到的问题是,当我git rebase master在部署分支上执行时,它会出现一个3向合并/手动合并所需的错误(我不认为错误消息非常通用,足以发布).Git告诉我执行合并然后git rebase --continue用来完成 - 这从来都不行.
我发现"确实"工作正在运行git rebase master --interactive,清理选择列表(在此列表中有5个左右重复的"提交"但具有不同的引用号(相同的消息),因此我将选择其中一个)然后手动执行合并.一旦我为每次提交完成了这个,那么我可以继续使用rebase并且它很高兴...
直到下次我需要执行rebase.
那么有谁知道什么可能会幸福?该项目并非真正"秘密",所以如果需要,我可以发布消息,日志,分支图等.
谢谢
我使用专有的脚本语言开发了非常恢复的代码,其中大多数配置都包含在代码本身中.
显而易见的问题是测试和生产环境之间代码本身的差异,而这正是我试图用GIT管理的.
由于我的测试环境非常不稳定,我想我可以在GIT中创建一个分支,同时进行更改(并在其中保留代码和测试配置),并且在代码被接受之后我将其合并到生产中.
好吧,当我要求git合并我的分支时,它可以很好地处理代码..但是配置也会被迁移,而且我必须逐个文件地打开,将其更改回原来的状态.
无论如何我可以禁用GIT的自动合并并威胁一切,因为代码冲突要手动与WinMerge合并或稍后?代码很简短,真的.因为无论如何我都要编辑它以应用配置......
ps:请注意,我不是问如何在git上配置WinMerge.我有这些工具.我的问题是如何始终在分支之间执行手动合并.
谢谢!
F.
我想避免git自动合并我的composer.json.这样我可以在开发分支中使用composer.json,该分支使用dev-develop包,而master中的那个只使用dev-master包.
我可以使用这里建议的两个composer.json文件,但我担心我最终会忘记在我的composer.json中为master添加一个bundle.特别是在自动化任务时,这可能最终导致灾难.
所以实际上我想要git: