什么是在git中保持本地更改不实用的实用工作流程?

Res*_*uta 10 git version-control dvcs

我想要做的就是在那个问题中描述.但我想以实际和更通用的方式解决这个问题.用例如下:

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

链接到解决方案说要使用git add -p,这是不实际的,一直手动挑选块或者可能有更方便的方法吗?

例如,以下之一可以工作:

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

问题非常普遍,目前还没有解决方案,这很奇怪.例如,TortoiseSVN具有"忽略提交"功能,Perforce允许将该类型的本地更改存储在单独的更改列表中,并且永远不会提交它...

有什么想法吗?

Blu*_*ict 10

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

git update-index --assume-unchanged web.config crateDb.sql
Run Code Online (Sandbox Code Playgroud)

从git帮助:

--assume-不变

--no-假设未发生变化

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

此选项还可以用作粗略的文件级机制,以忽略跟踪文件中未提交的更改(类似于.gitignore对未跟踪文件的更改).如果需要在索引中修改此文件,例如在提交中合并时,Git将失败(优雅); 因此,如果上游更改了假定未跟踪文件,则需要手动处理该情况.