Visual Studio Git-无法忽略提交的文件和切换分支

Visual Studio Git-无法忽略提交的文件和切换分支,git,visual-studio,tfs,Git,Visual Studio,Tfs,我在视觉工作室与TFS合作,我有3个分支机构。在我们的回购协议中,每个分支机构都有2个带有配置文件的解决方案。这些配置文件已提交,需要保持提交状态。但是,在我的机器上,我需要更改配置文件以指向正确的数据库 我尝试了git update index--skip worktree App.config,但是当我转到切换分支时,我收到以下错误消息: 也有 git rm --cached App.config 它创建.gitignore文件,提交后,App.config将从repo中删除,这是我不想

我在视觉工作室与TFS合作,我有3个分支机构。在我们的回购协议中,每个分支机构都有2个带有配置文件的解决方案。这些配置文件已提交,需要保持提交状态。但是,在我的机器上,我需要更改配置文件以指向正确的数据库

我尝试了git update index--skip worktree App.config,但是当我转到切换分支时,我收到以下错误消息:

也有

git rm --cached App.config
它创建
.gitignore
文件,提交后,App.config将从repo中删除,这是我不想要的

我的目标是忽略对文件所做的更改,但将文件保留在在线git repo中。

git更新索引--跳过工作树只会隐藏更改,使其不会显示在索引中,而不会使更改消失。如果您要切换分支,git需要能够更新配置文件,但您的本地更改会阻止它这样做(无论文件是否隐藏在索引中,这都是正确的)

这是我最近一直在使用的工作流:

  • 仅为本地测试提交创建分支。我将其称为
    test
    。在那里提交您的配置更改
  • 像平常一样在当地分支机构工作。我称之为工作。在执行过程中提交一些小的更改(无论如何,这是一个很好的实践)
  • 当您需要使用更新的配置文件运行测试时,请签出
    test
    ,并在
    work
    上重新设置它的基础。(如果你经常这样做,你可以设置
    test
    来跟踪
    work
    来保存一些击键。)
  • 一旦
    test
    位于
    work
    之上,您就可以
    git checkout test
    使用修改后的配置,或者
    git checkout work
    继续编码
  • 准备发布更改时,
    rebase--interactive
    将所有临时提交压缩为一个(或多个)正式更改。从
    work
    推送,并将
    test
    放在一边,直到您再次需要这些本地更改
  • git update index--skip worktree
    只会隐藏索引中显示的更改,而不会使更改消失。如果您要切换分支,git需要能够更新配置文件,但您的本地更改会阻止它这样做(无论文件是否隐藏在索引中,这都是正确的)

    这是我最近一直在使用的工作流:

  • 仅为本地测试提交创建分支。我将其称为
    test
    。在那里提交您的配置更改
  • 像平常一样在当地分支机构工作。我称之为工作。在执行过程中提交一些小的更改(无论如何,这是一个很好的实践)
  • 当您需要使用更新的配置文件运行测试时,请签出
    test
    ,并在
    work
    上重新设置它的基础。(如果你经常这样做,你可以设置
    test
    来跟踪
    work
    来保存一些击键。)
  • 一旦
    test
    位于
    work
    之上,您就可以
    git checkout test
    使用修改后的配置,或者
    git checkout work
    继续编码
  • 准备发布更改时,
    rebase--interactive
    将所有临时提交压缩为一个(或多个)正式更改。从
    work
    推送,并将
    test
    放在一边,直到您再次需要这些本地更改

  • 我建议采用以下方法。让Git知道这些更改:

    git update-index --no-skip-worktree EACH_CONFIG_FILE 
    
    git stash save "Save local conf"
    
    隐藏这些更改:

    git update-index --no-skip-worktree EACH_CONFIG_FILE 
    
    git stash save "Save local conf"
    
    现在,您可以毫无问题地签出到其他分支,然后恢复本地更改:

    git stash pop
    
    您可以修复冲突(如果有),接受本地配置文件。
    最后,再次更新索引以跳过这些文件。

    我建议采用以下方法。让Git知道这些更改:

    git update-index --no-skip-worktree EACH_CONFIG_FILE 
    
    git stash save "Save local conf"
    
    隐藏这些更改:

    git update-index --no-skip-worktree EACH_CONFIG_FILE 
    
    git stash save "Save local conf"
    
    现在,您可以毫无问题地签出到其他分支,然后恢复本地更改:

    git stash pop
    
    您可以修复冲突(如果有),接受本地配置文件。
    最后,再次更新索引以跳过这些文件。

    在本地计算机上签出了哪个分支?您使用的是什么visual Studio?另外,您是否使用像GitExtensions这样的GUI?它们都已签出。VS 2017允许我通过下拉菜单在它们之间切换,并自动更新本地计算机上的文件。我有陆龟作为GUI,但我现在只使用VS哦,太棒了。因此,作为澄清,您从下拉列表中选择的文件是唯一已签出的文件,其余文件存在于本地,但尚未签出。您对这些分支所做的任何更改都不会自动联机。下拉列表用于切换分支,与单个文件无关。所有文件都存在于repo上,并且已经签出,因此我对本地文件所做的任何更改都将与repo不同,因此VisualStudio希望我将其暂存。所以我不能更改分支,执行上面的任何一个命令都会产生相同的错误。我想您可能会感到困惑,下拉菜单实际上是在磁盘上签出一个不同的分支,一次只签出一个。请参阅此页,在您的本地计算机上签出哪个分支?您使用的是什么visual Studio?另外,您是否使用像GitExtensions这样的GUI?它们都已签出。VS 2017允许我通过下拉菜单在它们之间切换,并自动更新本地计算机上的文件。我有陆龟作为GUI,但我现在只使用VS哦,太棒了。因此,作为澄清,您从下拉列表中选择的文件是唯一已签出的文件,其余文件存在于本地,但尚未签出。您对这些分支所做的任何更改都不会自动联机。下拉列表用于切换分支,与单个文件无关。所有文件都存在于