git - git 可以远程忽略文件,同时在本地包含它吗?
问题描述
我正在开发一个 ASP.NET 项目,当我在桌面上进行本地开发时,我需要使用 connectionStrings 连接到数据库,但不想将它们签入网络上的 tfs 存储库。通过将 ConnectionStrings.config 文件放在 gitignore 文件中来排除它是很容易的。但这也使它无法保存在我正在处理的分支的本地副本中,因此每次我在本地分支之间切换时,我的配置文件都会消失。
有没有办法在本地提交但远程忽略?
解决方案
有没有办法在本地提交但远程忽略?
不。
更准确地说,不是你想的那样。当你意识到在某种程度上 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 没有从他们那里得到任何新的东西,你的origin/*
名字仍然指向这些相同的提交。)
现在你在新分支上做一些工作并提交。让我们称之为新提交A
,以便我们可以讨论它(实际上它有一些丑陋的哈希 ID):
...--o--o--o <-- master, origin/master
\
o--o <-- develop, origin/develop
\
A <-- work (HEAD)
如果您来自您的 Git 存储库,那么您可以提供git push
的唯一新提交A
是.
CommitA
的实际 ID,即大而丑陋的散列,取决于关于commit的一切A
:这包括附加到commit的所有文件,以及您指向的提交是 commit的父级A
的事实。develop
A
如果您向A
其他 Git 提交提交,则您有义务向他们提交所有与 commit 相关的文件A
。如果他们没有所有文件,他们就没有 commit A
。
你可以做一个新的提交——我们称之为——这A'
很像, A
只是略有不同。让我们A'
让它没有文件。A
但是,它的父级与 ' 的父级相同,并且它具有所有其他文件——请记住,每个提交都是所有文件的完整快照——A
具有。让我们先做然后复制A'
,develop
只是我们省略了一个文件:git checkout develop
A
...--o--o--o <-- master, origin/master
\
o--o <-- origin/develop
|\
| A' <-- develop (HEAD)
\
A <-- work
现在你可以让你的 Git 调用另一个 Git 并通过你的名字提供它,不是A
,而是。如果他们选择接受它,你的 Git 现在会记住他们指向.A'
develop
develop
A'
这种特殊的方法使用起来相当痛苦。这不是要走的路,如果你能找到其他方法。
推荐阅读
- ruby - Capybara / RSpec 确保页面上任何地方都不存在某些东西
- html - 有没有办法将“a”标签链接取消设置为默认颜色
- julia - 具有通用函数成员的结构数组?
- heroku - 即使它在 requirements.txt 文件中,Heroku 也不会安装模块 psycopg2
- intellij-idea - IntelliJ PlantUML 插件不检测 *.pu 文件
- ruby-on-rails - 如何通过 application.html.erb 将引导闪存消息添加到整个应用程序?
- node.js - 如何进行单用户认证和授权?或者如何限制在 node js 中注册到应用程序的用户数量?
- sql - SQL 根据列条件检索行
- sql - T-SQL - 合并两个表而不创建临时表
- javascript - React Native,一个按钮,每次点击三个名称