Git:阻止暂存某些文件,自动暂存所有文件

时间:2016-04-08 13:26:51

标签: git git-stash git-stage

我想取消当前工作副本中的所有内容,但会自动暂存我将来编辑的所有文件和帅哥

例如,我正在使用与我正在进行的项目中的大多数其他人不同版本的CocoaPods。我想升级配置文件的配置以与我的CocoaPods兼容而不会破坏它们。最简单的方法是不在拉取请求中包含新配置,但这意味着我无法构建。存储和弹出不起作用,因为如果我在编辑配置后存储然后应用我的更改,则弹出将修复配置但撤消我的更改。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

一种方法是以本地只能看到的方式修改配置文件 但是对于该回购的其他用户来说仍然是不可见的。

如果这些修改得到了很好的定义(而不是your.config.file中的所有修改),那么您可以考虑content filter driver以便在结帐时为该配置文件生成正确的内容:

  • .gitattributes declaration中添加与your.config.file个文件相关联的涂抹脚本:

    your.config.file filter=filterconfig
    

(在本地仓库的根文件夹中编辑或创建.gitattributes文件,并在其中添加上面的行。您可以添加,提交和推送该文件:它不会产生任何影响对于其他用户)。

smudge
(图片来自" Customizing Git - Git Attributes",来自" Pro Git book")

cd /path/to/your/local/cloned/repo
git config filter.filterconfig.smudge 'update_config'
git config filter.filterconfig.clean 'restore_config'

update_configrestore_config脚本可以放在本地$PATH的任何位置(即使你在Windows上,它们都是bash,因为它们将由mingw git bash执行)

update_config脚本会:

  • 制作配置文件的初始副本
  • 在配置文件中注入其修改。

这样,触发更新工作树的git pull将自动重新生成配置文件内容,并进行所需的本地修改。

restore_config脚本会在git调用文件时恢复文件的保存副本(例如,它将由git statusgit diff触发:

cat saved_copy

这样,配置文件出现,就git而言永远不会改变。

答案 1 :(得分:1)

我一直在使用的策略是使用两个分支:一个是公共分支,另一个是永不离开机器并且包含配置更改的分支。

当您进行开发时,您已检出您的私有分支,但您没有承诺。一旦您对更改感到满意,就可以存储它们,签出公共分支,执行git stash pop并提交结果。之后,您将返回到您的私有分支并合并您的新提交。生成的历史记录将如下所示:

*   (HEAD->private) merge
|\
| * (public) commit 3
* | merge
|\|
| * commit 2
* | a change in your local configuration
* | merge
|\|
| * commit 1
* | some private configuration changes
 \|
  * some base commit

现在,如果您绘制public分支的历史记录,就可以得到:

* (public) commit 3
* commit 2
* commit 1
* some base commit

如您所见,任何公共提交都不会取决于您对配置的本地更改,从而保持公开历史记录清除配置更改。但是,您的配置更改完全受版本控制,因此您可以返回到任何合并提交,并知道您将能够构建。

当然,价格是不断变化的分支机构的麻烦。所以我会尽可能地避免使用这样的结构,但在某些情况下它会有所帮助。