从分叉的上游原点拉出时忽略特定文件

时间:2014-08-14 18:59:46

标签: git pull

在git中,如何从上游源(即原始项目)中提取某些文件?

我有一个我正在研究的项目,它最初是从一个非常活跃的存储库中分叉出来的。我已经将原始文件添加为名为“上游”的远程程序,以便可以运行:

git pull upstream

并将项目更新为最近的提交。

问题:有些文件(例如我的Gruntfile.js)我不想在原始项目旁边更新。每当我提交这些提交时,我都会遇到合并冲突,因为我已经更改了我自己版本中的文件。

我确实想要为我自己的本地提交跟踪这些文件,并从我自己的来源提取更改,因此永久性地将这些文件添加到.gitignore不是一种选择。

我目前的解决方案是让一个繁琐的任务临时添加Gruntfile.js和其他人.gitignore,从上游拉,然后从.gitignore删除它们,以便我可以跟踪自己的更改并推动我的起源。然而,这感觉很糟糕。

有什么办法可以在从“上游”拉出来时忽略这些文件吗?

2 个答案:

答案 0 :(得分:8)

是的,你可以做到。

  

git pull是git fetch的简写,后跟git merge FETCH_HEAD

首先你可以做一个,

git fetch upstream

接着,

git merge --no-log --no-ff --no-commit upstream/branch

Git将在提交前停止。因此,您应该能够修改合并,并排除所需的文件。

<强>更新

可以使用git别名组合命令。

在〜/ .gitconfig

中创建一个别名
[alias]
   fnm = !git fetch upstream && git merge --no-log --no-ff --no-commit upstream/branch

您可以进一步添加,

[alias]
   fnm = !git fetch upstream && git merge --no-log --no-ff --no-commit upstream/branch && git reset file/path/not/to/be/updated && git checkout file/path/not/to/be/updated

使用git fnm进行完整操作。

答案 1 :(得分:1)

  

然而,这感觉很糟糕

一种不太常见的方法可能是避免在想要更新时保留文件的分叉版本。我不知道您的更改是什么,但是如果您的修改提出合并请求呢?

如果你的修改是个人的(例如:本地网址),那么在你引入本地配置文件的情况下提出合并请求呢?

例如https://github.com/fabelier/Doorbell所做的事情:它提供了一个默认使用的config.js.template文件,但是用户可以提供config.js文件来添加他们的文件自己的特点;并且这个文件没有保存在Git中。