Git:限制推送到远程仓库的文件

时间:2012-10-31 23:32:30

标签: git web-config

我有一个web项目,其根目录是我的git repo的根目录。 Git正在跟踪该项目中的大多数文件并推送到远程仓库。在项目的根目录我有一个web.config文件,我想在本地跟踪但不要推送到我们的远程仓库。

git可以实现这一点吗?

4 个答案:

答案 0 :(得分:2)

一种方法是在Git上游回购方(您要推送的那个)上添加virtual reference并安装Gitolite

如果包含错误的文件,那种更新挂钩可以分析推送到和拒绝推送的文件的内容。
VREF FILETYPE就是一个例子。

答案 1 :(得分:1)

这是可能的,只需在项目的根目录中创建一个文件,并将其命名为.gitignore(不要忘记文件名前面的Dot(.))。然后编辑文件并粘贴您想要忽略的文件,例如,我想忽略所有具有.ini扩展名的文件,因此我的.gitignore看起来像:

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

VonC的答案在理论上是最好的,假设您可以找到一个可以根据您的风格的git repo为您完成工作的工具。

穆罕默德正在做点什么,但还没到达那里。

我在this question

上复制了来自nasirkhan的最佳投注

在您的文件准备就绪后,例如:Web.config,运行以下命令:

function xmlPromise(name) {
    return Q.promise(function (resolve, reject, notify) {
        $.ajax({
            type: "GET",
            dataType: "xml",
            async: true,
            url: name,
            contentType: "text/xml; charset=UTF-8"
        })        
       .done(function (data) {
           resolve(data);
        }).fail(function () {
            reject();
        });
    });
};

//your xml files can be stored in the promises variable
var promises = [ xmlPromise('your-xml-file-1.xml'), xmlPromise('your-xml-file-2.xml') ];
var results = [];

Q.allSettled(promises).then(function(responses) {
    results.push(responses[0].value);
    results.push(responses[1].value);
});

如果您需要再次更新网络配置(跟踪更改),请运行:

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

git-update-index documentation