【问题标题】:Gitignore does not update a file already on my repoGitignore 不会更新我的仓库中已有的文件
【发布时间】:2014-02-04 04:52:26
【问题描述】:

我的 git 有一个简单的问题:

我在 github 上的存储库中有这个文件 inc.conf.php。 我不想从 repo 中删除他,这是一个基本的配置文件。

现在,在我的本地仓库中,我有相同的文件 inc.cong.php 和我自己的配置,我不希望这个文件被提交。

所以我创建了一个 .gitignore 并添加了 inc.config.php 。 (.gitignore 是提交并推送 repo)

但是当我在本地更新文件 inc.config.php 和磁带 git status 时:

On branch master
Your branch is up-to-date with 'origin/master'.

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   Swindle-Foundation5/inc.config.php

no changes added to commit (use "git add" and/or "git commit -a")

但我不想从 github 更改存储库上的文件。 我该怎么做?

【问题讨论】:

    标签: git github push gitignore git-commit


    【解决方案1】:

    .gitignore 仅用于防止文件被跟踪。跟踪文件后,忽略文件对其没有影响。

    您可以使用 git update-index --assume-unchanged Swindle-Foundation5/inc.config.php 让 Git 忽略对文件的更改。

    【讨论】:

    • 好吧,真的很有趣,所以 ..gitignore 对我来说没用。但是,如果有人克隆我的 repo,并更改了 inc.config.php,则该文件不能被忽略,所以......所以他可以将他的配置文件推送到 repo 上? ...或命令 git update ..... 已经忽略了所有克隆 repo 的人的文件?
    • 他将拥有与您相同的选项:提交对文件的更新或使用update-index --assume-unchanged。如果您以后想要跟踪此文件的更新,您可以随时使用--no-assume-unchanged 撤消此操作。
    • 好的,所以所有克隆 repo 的用户都需要输入这一行:“git update ...”如果他们想推送 repo ...我想我一开始就失败了。下次我在创建我的回购之前需要考虑更多......
    • 我的回答有效,但Shahbaz' answer 让你更接近你想去的地方,我想。
    【解决方案2】:

    .gitignore 告诉您不希望存储库中的哪些文件。如果您确实将文件放入存储库,那么 git 会跟踪它。告诉 git 我不想跟踪这个文件(通过.gitignore)是非常矛盾的,但我也想跟踪这个文件(通过将它添加到存储库)。

    有一些方法可以让git 在每次提交时都不提交对该文件的更改,这既乏味又丑陋。我的建议是先在你的脑海中解决这个问题。您是否要跟踪文件?如果这样做,那么文件的所有更改也将被跟踪。

    您可以选择通过引导程序生成文件。例如:

    # make a backup of the file
    $ git mv Swindle-Foundation5/inc.config.php Swindle-Foundation5/inc.config.php-template
    # add the file to .gitignore
    $ echo "inc.config.php" >> .gitignore
    # commit
    $ git commit -a
    

    因此,您基本上会跟踪文件的副本,而不是文件本身。并添加一个生成该文件的脚本(例如 bootstrap.bash):

    #! /bin/bash
    
    cp Swindle-Foundation5/inc.config.php-template Swindle-Foundation5/inc.config.php
    

    这样,您以后可以更新模板,也可以将其保存在存储库中,但是每次更改实际配置时,它们都不会被跟踪,因为它们属于被忽略的文件并且是不在存储库中。

    【讨论】:

    • 是的,好点子,但就像我对克里斯说的那样,如果有人克隆 repo,文件 inc.config.php 不会被忽略,所以他可以推送自己的 config.php 吗?这很糟糕,因为 config.php 上有私人信息
    • 这也是一个不错的选择。在 这种 的情况下,inc.config.php 文件 将在存储库的克隆中被忽略,因为它现在被通过 .gitignore 忽略。不过,您必须使用git rm --cached inc.config.php 之类的东西才能生效。
    • @Chris,git mv 会解决这个问题 ;) 是的 Martialp,正如 Chris 所说,你的仓库的克隆将不再有 inc.config.php,只有 inc.config.php-template,因为git mv 从存储库中删除该文件。
    • @Shahbaz,好点子,我不敢相信我从来没有想过以这种方式解决这个问题(使用mv 而不是rm --cached)!
    猜你喜欢
    • 2015-12-24
    • 1970-01-01
    • 2013-04-26
    • 1970-01-01
    • 1970-01-01
    • 2012-10-02
    • 1970-01-01
    • 2021-09-11
    • 2013-01-08
    相关资源
    最近更新 更多