Kev*_*ave 98 git merge push ignore repository
我myrepo在远程beanstalk服务器上调用了一个repo .
我把它克隆到我的本地机器上.创建了两个额外的分支:staging和dev.将这些分支推向远程.
现在:
local remote server
--------------------------------------------------------
master ==> Pushes to `master` ==> deployed to `prod`
staging ==> Pushes to `staging` ==> deployed to `staging`
dev ==> Pushes to `dev` ==> deployed to `dev`
Run Code Online (Sandbox Code Playgroud)
我有一个文件config.xml,在每个分支上都有不同的名称.
我想仅在合并期间忽略此文件.但是我希望在结帐或从/向repo分支提交时包含它.
我想要的原因是,我们有一个部署脚本,可以拉出(签出)特定分支并在各自的服务器上部署.因此,我们需要config.xml特定分支的文件在部署时进入特定服务器,如上所示.
我想.gitignore不会工作.还有什么其他选择?请注意,被忽略的文件应该是checkout和commit的一部分,这很重要.它只应在合并期间被忽略.
谢谢!
小智 82
我通过使用带有--no-commit选项的git merge命令解决了这个问题,然后显式删除了暂存文件并忽略了对文件的更改.例如:说我想忽略任何更改,myfile.txt我按如下方式进行:
git merge --no-ff --no-commit <merge-branch>
git reset HEAD myfile.txt
git checkout -- myfile.txt
git commit -m "merged <merge-branch>"
Run Code Online (Sandbox Code Playgroud)
如果要有要跳过的文件列表,可以将语句2和3放在for循环中.
Kev*_*ave 48
我最终找到了git attributes.试试吧.到目前为止工作.尚未检查所有方案.但它应该是解决方案.
eig*_*sha 16
.gitattributes - 是存储库的根级文件,用于定义子目录或文件子集的属性.
您可以指定该属性以告知Git对特定文件使用不同的合并策略.在这里,我们希望保留现有config.xml分支.我们需要设置merge=ours到config.xml的.gitattributes文件.
merge=ours 如果发生合并冲突,告诉git使用我们的(当前分支)文件.
.gitattributes在存储库的根级别添加文件
您可以在.gitattributes文件中为confix.xml设置属性
config.xml merge=ours
Run Code Online (Sandbox Code Playgroud)然后用以下方法定义我们的虚拟合并策略:
$ git config --global merge.ours.driver true
Run Code Online (Sandbox Code Playgroud)如果您合并stag表单dev分支,而不是使合并与config.xml文件冲突,则stag branch的config.xml保留在您最初的任何版本中.
你可以先使用git merge --no-commit,然后编辑你想要的合并,即通过unstaging config.xml或任何其他文件,然后提交.我怀疑你想在使用钩子后进一步自动化它,但我认为值得手动至少进行一次.
正如许多人评论的那样,应该注意的是,接受的答案及其副本(对特定文件使用自定义合并策略)仅在存在实际合并冲突的情况下才有效。
2 个简单的情况不会导致合并冲突,因此提交会被合并:
config.xml您在功能分支中有一个文件,而不是在主分支中。您想在合并期间排除它config.xml在两个分支中的文件都基于相同的提交。新代码已添加到功能文件中。要么像unmesh-gurjarmerge --no-commit演示的那样使用,要么简单地将单独的提交挑选到 master 中。当然,后者相当麻烦,并且还存在一些其他陷阱(新的 SHA1 ID 等)
例子:
master,developdevelop分支中创建了文件并希望在合并时忽略它代码:
git config --global merge.ours.driver true
git checkout master
echo "path/file_to_ignore merge=ours" >> .gitattributes
git merge develop
Run Code Online (Sandbox Code Playgroud)
您也可以忽略具有相同扩展名的文件
例如所有带有.txt扩展名的文件:
echo "*.txt merge=ours" >> .gitattributes
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
81476 次 |
| 最近记录: |