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

时间:2012-04-19 20:21:10

标签: git version-control dvcs

that question中已经介绍了我想要做的事情。但我想以实际和更通用的方式解决这个问题。用例如下:

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

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

例如,以下之一可以起作用:

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

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

1 个答案:

答案 0 :(得分:10)

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

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

来自git help:

  

<强> - 假定-不变

     

- 不假设未更改

     

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

     

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