【问题标题】:Visual Studio Git - Cannot ignore committed file and switch branchesVisual Studio Git - 无法忽略提交的文件并切换分支
【发布时间】:2018-01-23 17:30:50
【问题描述】:

我正在使用 TFS 在 Visual Studios 中工作,我有 3 个分支。在我们的仓库中,每个分支都有 2 个带有配置文件的解决方案。这些配置文件已提交并需要保持提交。但是,在我的机器上,我需要更改配置文件以指向正确的数据库。

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

Output from visual studios

还有

git rm --cached App.config

它会创建 .gitignore 文件,并在提交该文件时从我不想要的 repo 中删除 App.config。

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

【问题讨论】:

  • 在本地机器上签出了哪个分支?你用的是什么视觉工作室?另外,你使用像 GitExtensions 这样的 GUI 吗?
  • 他们都已签出。 VS 2017 允许我通过下拉菜单在它们之间切换,它会自动更新我本地机器上的文件。我有 TortoiseGit 作为 GUI,但我现在只使用 VS
  • 太棒了。因此,作为澄清,您从下拉列表中选择的文件是唯一已签出的文件,其余文件存在于本地,但尚未签出。您对这些分支中的任何一个所做的任何更改都不会自动推送到网上。
  • 下拉菜单用于切换分支,与单个文件无关。所有文件都存在于 repo 中并且已被签出,因此我对本地文件所做的任何更改都将与 repo 不同,因此 Visual Studio 希望我暂存它们。所以我不能更改分支,并且执行上述任一命令都会产生相同的错误。
  • 我认为您很困惑,该下拉列表是实际检查磁盘上不同分支之一的实际内容,一次只检查一个。参考这个link

标签: git visual-studio tfs


【解决方案1】:

git update-index --skip-worktree 仅隐藏更改而不显示在索引中,它不会使更改消失。如果您正在切换分支,git 需要能够更新您的配置文件,但您的本地更改会阻止它这样做(无论文件是否从索引中隐藏都是如此)。

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

  1. 仅为本地测试提交创建一个分支。我会称之为test。在那里提交您的配置更改。
  2. 照常在本地分支机构工作。我会称它为work。随时提交小的更改(无论如何这都是很好的做法)。
  3. 当您需要使用更新的配置文件运行测试时,请签出 test 并将其重新设置在 work 之上。 (如果您经常这样做,您可以设置 test 来跟踪 work 以节省一些击键。)
  4. 一旦test 位于work 之上,您可以git checkout test 使用您修改后的配置,或git checkout work 继续编码。
  5. 当您准备好发布您的更改时,rebase --interactive 将您的所有临时提交压缩为一个(或多个)正式更改。从 work 推送,并让 test 一个人呆着,直到您再次需要这些本地更改。

【讨论】:

    【解决方案2】:

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

    git update-index --no-skip-worktree EACH_CONFIG_FILE 
    

    隐藏这些更改:

    git stash save "Save local conf"
    

    您现在可以毫无问题地签出到另一个分支,然后恢复您的本地更改:

    git stash pop
    

    并且您可以通过接受本地配置文件来解决冲突(如果有)。 最后,再次更新索引以跳过这些文件。

    【讨论】:

      猜你喜欢
      • 2010-11-21
      • 1970-01-01
      • 2020-12-27
      • 2013-03-11
      • 1970-01-01
      • 1970-01-01
      • 2016-04-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多