我想取消暂存当前工作副本中的所有内容,但会自动暂存我将来编辑的所有文件和块。例如,我在项目中使用的CocoaPods版本与大多数其他人不同。我希望升级配置文件的配置,使其与我的CocoaPods兼容,而不破坏它们的配置。最简单的方法是不将新配置包含在提取请求中,但这意味着我不能构建。存储和弹出都不起作用,因为如果我在编辑配置后存储,然后应用我的更改,弹出将修复配置,但撤消我的更改。我该如何解决这个问题?
0pizxfdo1#
一种方法是以只有您本地才能看到的方式修改配置文件。但在某种程度上,仍然是无形的其他用户的回购。如果这些修改定义得很好(并且不是在your.config.file中到处都是),那么您可以考虑使用content filter driver,以便在 checkout 时为该配置文件生成正确的内容:
your.config.file
.gitattributes
your.config.file filter=filterconfig
(edit或者在本地存储库的根文件夹中创建一个.gitattributes文件,并在其中添加上面的行。它不会对其他用户产生任何影响)。
(图片来自“自定义Git - Git属性,”来自“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脚本将:
update_config
restore_config
$PATH
这样,触发工作树更新的git pull将自动重新生成包含所需本地修改的配置文件内容。每当git调用restore_config脚本时,它就会恢复文件的副本(例如,它会被git status或git diff触发):
git pull
git status
git diff
cat saved_copy
这样,在git看来,config文件 * 看起来 * 永远不会改变。
72qzrwbm2#
我一直在使用的一个策略,就是使用两个分支:一个分支是公共的,另一个分支永远不会离开您的计算机,并且包含您的配置更改。当你进行开发时,你 checkout 了私有分支,但是你并没有提交它。一旦你对你的修改感到满意,你就把它们藏起来, checkout 公共分支,执行一个git stash pop,然后提交结果。之后,你返回私有分支并合并你的新提交。产生的历史看起来像这样:
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
* (public) commit 3 * commit 2 * commit 1 * some base commit
正如你所看到的,没有一个公共提交依赖于你对配置的本地修改,这使得公共历史记录中没有你的配置修改。然而,你的配置修改是完全受版本控制的,所以你可以回到你的任何合并提交,并知道你将能够进行构建。当然,这样做的代价是不断改变分支的麻烦。所以我会尽可能避免这样的构造,但在某些情况下它会很有帮助。
l2osamch3#
看起来像是一份工作--没有变化。
git update-index --assume-unchanged <file>
这将阻止您的更改被暂存和提交。
git update-index --no-assume-unchanged <file>
恢复正常。
3条答案
按热度按时间0pizxfdo1#
一种方法是以只有您本地才能看到的方式修改配置文件。
但在某种程度上,仍然是无形的其他用户的回购。
如果这些修改定义得很好(并且不是在
your.config.file
中到处都是),那么您可以考虑使用content filter driver,以便在 checkout 时为该配置文件生成正确的内容:.gitattributes
declaration:(edit或者在本地存储库的根文件夹中创建一个
.gitattributes
文件,并在其中添加上面的行。它不会对其他用户产生任何影响)。(图片来自“自定义Git - Git属性,”来自“Pro Git book“)
update_config
和restore_config
脚本可以在本地$PATH
上的任何地方(即使你在Windows上,它们也在bash中,因为它们将由mingw git bash执行)。update_config
脚本将:这样,触发工作树更新的
git pull
将自动重新生成包含所需本地修改的配置文件内容。每当git调用
restore_config
脚本时,它就会恢复文件的副本(例如,它会被git status
或git diff
触发):这样,在git看来,config文件 * 看起来 * 永远不会改变。
72qzrwbm2#
我一直在使用的一个策略,就是使用两个分支:一个分支是公共的,另一个分支永远不会离开您的计算机,并且包含您的配置更改。
当你进行开发时,你 checkout 了私有分支,但是你并没有提交它。一旦你对你的修改感到满意,你就把它们藏起来, checkout 公共分支,执行一个
git stash pop
,然后提交结果。之后,你返回私有分支并合并你的新提交。产生的历史看起来像这样:现在,如果你绘制
public
分支的历史记录,你会得到:正如你所看到的,没有一个公共提交依赖于你对配置的本地修改,这使得公共历史记录中没有你的配置修改。然而,你的配置修改是完全受版本控制的,所以你可以回到你的任何合并提交,并知道你将能够进行构建。
当然,这样做的代价是不断改变分支的麻烦。所以我会尽可能避免这样的构造,但在某些情况下它会很有帮助。
l2osamch3#
看起来像是一份工作--没有变化。
这将阻止您的更改被暂存和提交。
恢复正常。