2012-10-31 99 views
2

我有一个web项目,其根目录是我的git仓库的根目录。 Git正在跟踪这个项目中的大部分文件并推送到远程仓库。在项目的根目录中,我有一个web.config文件,我想在本地进行跟踪,但不会推送到远程仓库。Git:限制被推送到远程回购站的文件

这甚至可能与git?

+0

我的远程仓库现在是Bitbucket。我意识到这可能会影响我的选择。 – LeRoy

回答

0

您可以创建一个单独的分支(我将其称为config)并在其中添加文件并使用该分支来跟踪对该文件的更改,并合并来自另一个分支(可能为master)的更改。然后,您可以自由地将更改推送到master分支,而无需推送配置文件。但是你需要小心避免错误的分支。

另一个选择可能是将更改提交到单独存储库中的配置文件,并且在工作树中为当前存储库提供符号链接或副本。将这个添加到.gitignore文件中可以防止当前存储库中的git将其列为需要添加的内容。这种方式不太可能导致意外将该文件推送到您的服务器。

+0

越来越多,它看起来像我需要使用一个单独的存储库。这将允许我在一个地方跟踪来自我们不同服务器的所有配置文件。 – LeRoy

+0

当人们考虑这个问题的时候,像LeRoy这样的人只需要小心避免在签入时推送文件(比如web.config)。这个回答实际上是做同样的事情,但将这个担心移到了另一个步骤在这个过程中,以及增加必须考虑的步骤。这不适用于解决方案,也不能简化事情。 – Suamere

2

一种方法是在Git上游回购端(您推送的那个端)上安装virtual referenceGitolite

这种更新钩子可以分析文件的内容,如果文件中包含错误的文件,它们会推送并拒绝推送。
VREF FILETYPE就是一个例子。

+0

我实际上会推动bitbucket,所以我不知道这是否是一种选择。 – LeRoy

+0

@LeRoy它可以是一个选项,如果你推送一个*中间*库,将拒绝任何错误的内容,并且如果不被拒绝,将会自动推送到你实际的最终上游回购(BitBucket之一)。 – VonC

+0

感谢您的建议。我不在某个地方添加中间步骤。这听起来像是一个很好的解决方案。 – LeRoy

1

这是可能的,只需在项目的根目录下创建一个文件,并将其命名为.gitignore(不要忘记文件名前面的点(.))。然后编辑要忽略任何文件的文件和粘贴,例如,我想忽略具有的.ini扩展名的文件,所以我.gitignore样子:

<<<<<<< HEAD 
# built application files 
*.ini 
>>>>>>> 
+0

原来这种方法不起作用。为了使gitignore忽略Web.Config更改,它不能存在于Repo中。所以,你不能在Web.Config中进行检查,因为你喜欢它进入Repo,然后gitignore变化前进。如果你想添加Web.config到gitignore,你还必须从repo中删除它,并打开一整个新的蠕虫罐。 – Suamere

0

VonC的答案是理论上最好的,假设你可以找到一个工具,可以根据你的味道的git回购为你做这项工作。

穆罕默德正在做些什么,但没有完全达到目的。

我复制从nasirkhan最好的选择上this question

您的文件后,生产准备,例如:如果你需要更新web配置

git update-index --assume-unchanged Web.config 

:Web.config文件,运行此命令再次(修订),运行以下命令:

git update-index --no-assume-unchanged Web.config 

git-update-index documentation