10

我想要做的已经在那个问题中描述了。但我想以一种更实用、更通用的方式解决这个问题。所以用例如下:

  • 我在几个文件或任何其他文件web.config中有几个本地更改createDb.sql
  • 我不想提交这些文件,因为更改仅针对我的本地计算机
  • 这些文件必须是版本控制的,而且经常对其中一些文件进行更改(特别是 sql 脚本),所以我想接收这些文件的更新
  • 确实想提交所有其他文件
  • 我希望能够在一个命令中毫无摩擦地做到这一点(使用 posh-git,所以欢迎使用 powershell)

据说使用的链接到解决方案git add -p并不实用,一直手动选择块很无聊,或者也许有更方便的方法?

例如,以下其中一项可能有效:

  • 如果能够在将工作副本中的文件添加到索引之前过滤它们,例如git -add -A -EXCEPT web.config crateDb.sql. 然后我可以将一个 git 别名映射到那个,就是这样。
  • 如果有能力取消应用存储。我的意思是从工作副本中删除一个特定存储中包含的更改。所以我必须git stash -deapply在每次提交之前做一些事情,这也很好。

这个问题很常见,奇怪的是目前没有解决方案。例如,TortoiseSVN 具有“ignore-on-commit”功能,Perforce 允许将该类型的本地更改存储在单独的更改列表中,并且从不提交。

4

1 回答 1

10

您可以在 git 提交之前尝试执行以下操作:

git update-index --assume-unchanged web.config crateDb.sql

来自 git 帮助:

--假设不变

--no-assume-unchanged

指定这些标志时,不会更新为路径记录的对象名称。相反,这些选项设置和取消设置路径的“假设不变”位。当“假设不变”位打开时,git 停止检查工作树文件是否有可能的修改,因此您需要手动取消设置该位以告诉 git 当您更改工作树文件时。这在处理具有非常慢的 lstat(2) 系统调用(例如 cifs)的文件系统上的大型项目时有时会很有帮助。

此选项也可以用作粗略的文件级机制,以忽略跟踪文件中未提交的更改(类似于 .gitignore 对未跟踪文件所做的事情)。如果 Git 需要修改索引中的这个文件,例如在提交合并时,Git 将失败(优雅地);因此,如果假定的未跟踪文件在上游发生更改,您将需要手动处理这种情况。

于 2012-04-19T20:26:55.353 回答