我正在开发一个ASP.NET项目,当我在桌面上进行本地开发时,我需要使用connectionStrings来连接数据库,但是不想将它们检查到Web上的tfs存储库中。通过将ConnectionStrings.config文件放在gitignore文件中来排除它是很容易的。但是这也使它不能保存在我正在处理的分支的本地副本中,所以每当我在本地分支之间切换时,我的配置文件就会消失。
有没有办法在本地提交但远程忽略?
答案 0 :(得分:2)
有没有办法在本地提交但远程忽略?
没有
更确切地说,不是你的想法。当你意识到Git在某种程度上并不关心文件时,可以所做的事情变得显而易见。 Git关心的 - 从存储库到存储库的转移 - 是提交。对于与提交图一起使用的Git算法,其重要部分是提交及其父/子关系。文件只是为了骑行而来。
假设您从存储库中开始提交一组提交,这些提交是从其他存储库复制的(以便其他存储库也有这两个分支):
...--o--o--o <-- master
\
o--o <-- develop
此处的每轮o
代表一次提交。您创建了一个新分支work
,指向develop
指向的相同提交:
...--o--o--o <-- master, origin/master
\
o--o <-- develop, origin/develop, work (HEAD)
(origin/*
名称是你Git记住你的Git在他们的 Git上看到的内容的方式,所以只要你的Git没有从他们那里获得任何新内容,你的{{1}名称仍然指向这些相同的提交。)
现在你在新分支和提交上做一些工作。让我们调用这个新的提交origin/*
,以便我们可以讨论它(实际上它有一些很难看的哈希ID):
A
如果您从Git存储库...--o--o--o <-- master, origin/master
\
o--o <-- develop, origin/develop
\
A <-- work (HEAD)
,那么您可以提供的唯一新提交是git push
。
提交A
的实际ID,大丑陋的哈希,依赖于关于提交A
的所有:这包括所有附加的文件 to commit A
,以及A
点提交develop
父级的提交。
如果您将提交A
提供给其他Git,则您有义务为每个提交A
的文件提供。如果他们没有所有文件,则他们没有提交A
。
你可以进行新的提交 - 让我们调用此A
- 这就像 A'
一样,只是略有不同。让我们A
使它没有文件。它的父节点与A'
的父节点相同,并且它包含所有其他文件 - 请记住,每次提交都是所有文件的完整快照 - A
具有。我们将A
放在A'
上develop
,然后复制git checkout develop
,但我们省略了一个文件:
A
现在你可以让你的Git通过你的名字...--o--o--o <-- master, origin/master
\
o--o <-- origin/develop
|\
| A' <-- develop (HEAD)
\
A <-- work
来调用另一个Git并提供它,而不是A
,而是A'
。如果他们选择接受它,您的Git现在会记住他们的 develop
指向develop
。
这种特殊的方法使用起来相当痛苦。如果您可以找到其他方式,那不是可行的方法。
答案 1 :(得分:0)
如果切换分支,则忽略的文件会保留在原位。如果将ConnectionStrings.config文件添加到所有分支(或共同祖先)上的.gitignore
,则应始终存在(直到您执行完整git clean
)。
一个问题是如果新人第一次克隆,则该文件不存在。在这种情况下,有些人有一个模板示例配置文件,如ConnectionStrings.config.example
,其中包含一些伪示例数据,您提交(而不是忽略)。在您第一次克隆后,执行copy ConnectionStrings.config.example ConnectionStrings.config
并修改真实配置。
另一个解决方案(虽然有点特别)是,如果你有3个开发人员在该网站上工作,你可以拥有一个ConnectionStrings.config,其中包含不同名称的本地环境的多个连接字符串,例如&#34; BobDevDB& #34;,&#34; AliceDevDB&#34;,&#34; JohnDevDB&#34;,每个名称前缀类似于他们的开发计算机名称或他们的Windows用户名,以便您可以在运行时选择正确的连接字符串。这样你就不必忽略任何东西,它总是有效。
答案 2 :(得分:0)
我们发现了这个问题。这个项目有几个开发分支,并不是所有的分支都将ConnectionStrings.config添加到他们的.gitignore中。所以有人在其中一个分支中使用ConnectionStrings.config连接到数据库,当他们检查了代码时,他们也检查了配置文件。
解决方案有两个部分。首先,我们必须更新所有活动开发分支的.gitignore,以便忽略配置文件。然后我们不得不从该分支的缓存中删除该文件。通过Visual Studio的团队资源管理器没有明显的方法,所以我们在命令行上使用了--cached
选项。
git rm -r --cached .\ProjectName\ConnectionStrings.config
幸运的是,只有几个分支处于这种状态,并且很容易修复它们,将它们与原点同步,并且还可以修复每个人的本地分支。