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

时间:2017-08-15 18:08:35

标签: git visual-studio tfs

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

我已尝试import UIKit import FirebaseAuth class ProtectedViewController: UIViewController, ForceSignInBannerDelegate, SignUpViewControllerDelegate, LoginViewControllerDelegate{ override func viewDidLoad() { super.viewDidLoad() } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(true) NotificationCenter.default.addObserver(self, selector: #selector(checkAuthentication), name: .myNotification, object: nil) } override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(true) self.checkAuthentication() } func checkAuthentication() { let bannerViewController = ForceSignInBanner.instanceFromNib() as! ForceSignInBanner bannerViewController.delegate = self if (!AuthenticationService.sharedInstance.isAuthenticated()) { self.setView(view: bannerViewController, hidden: false) print("Need to login") } else if(AuthenticationService.sharedInstance.isAuthenticated()) { self.setView(view: bannerViewController, hidden: true) } } func setView(view: UIView, hidden: Bool) { UIView.transition(with: view, duration: 0.5, options: .transitionCrossDissolve, animations: { _ in view.isHidden = hidden if hidden { view.removeFromSuperview() } else { self.view.addSubview(view) } }, completion: nil) } 但是当我去切换分支时,我收到以下错误消息:

Output from visual studios

还有

a =  [["a", "b", "c"], ["d", "e", "f"], ["g", "h", "i"]]
a[0].product(*a[1..a.length])
#=> [["a", "d", "g"], ["a", "d", "h"], ["a", "d", "i"], ["a", "e", "g"], ["a", "e", "h"], ["a", "e", "i"], ["a", "f", "g"], ["a", "f", "h"], ["a", "f", "i"], ["b", "d", "g"], ["b", "d", "h"], ["b", "d", "i"], ["b", "e", "g"], ["b", "e", "h"], ["b", "e", "i"], ["b", "f", "g"], ["b", "f", "h"], ["b", "f", "i"], ["c", "d", "g"], ["c", "d", "h"], ["c", "d", "i"], ["c", "e", "g"], ["c", "e", "h"], ["c", "e", "i"], ["c", "f", "g"], ["c", "f", "h"], ["c", "f", "i"]]
# or 
a.slice!(0).product(*a) #Note: this mutates array.
# or
a[0].product(*a.drop(1)) # suggested by Cary Swoveland

它创建git update-index --skip-worktree App.config文件,当提交时,App.config将从我不想要的repo中删除。

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

2 个答案:

答案 0 :(得分:0)

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,直到您再次需要进行本地更改。

答案 1 :(得分:0)

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

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

存储这些更改:

git stash save "Save local conf"

现在,您可以顺利签出到另一个分支,然后恢复本地更改:

git stash pop

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