我想取消当前工作副本中的所有内容,但会自动暂存我将来编辑的所有文件和帅哥。
例如,我正在使用与我正在进行的项目中的大多数其他人不同版本的CocoaPods。我想升级配置文件的配置以与我的CocoaPods兼容而不会破坏它们。最简单的方法是不在拉取请求中包含新配置,但这意味着我无法构建。存储和弹出不起作用,因为如果我在编辑配置后存储然后应用我的更改,则弹出将修复配置但撤消我的更改。
我该如何解决这个问题?
答案 0 :(得分:2)
一种方法是以本地只能看到的方式修改配置文件 但是对于该回购的其他用户来说仍然是不可见的。
如果这些修改得到了很好的定义(而不是your.config.file
中的所有修改),那么您可以考虑content filter driver以便在结帐时为该配置文件生成正确的内容:
在.gitattributes
declaration中添加与your.config.file
个文件相关联的涂抹脚本:
your.config.file filter=filterconfig
(在本地仓库的根文件夹中编辑或创建.gitattributes
文件,并在其中添加上面的行。您可以添加,提交和推送该文件:它不会产生任何影响对于其他用户)。
(图片来自" 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_config
和restore_config
脚本可以放在本地$PATH
的任何位置(即使你在Windows上,它们都是bash,因为它们将由mingw git bash执行)
update_config
脚本会:
这样,触发更新工作树的git pull
将自动重新生成配置文件内容,并进行所需的本地修改。
restore_config
脚本会在git调用文件时恢复文件的保存副本(例如,它将由git status
或git 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
如您所见,任何公共提交都不会取决于您对配置的本地更改,从而保持公开历史记录清除配置更改。但是,您的配置更改完全受版本控制,因此您可以返回到任何合并提交,并知道您将能够构建。
当然,价格是不断变化的分支机构的麻烦。所以我会尽可能地避免使用这样的结构,但在某些情况下它会有所帮助。