【问题标题】:Git pull problems with gitignoregitignore 的 Git 拉取问题
【发布时间】:2014-03-31 04:22:12
【问题描述】:

我已将文件添加到 gitignore:

db/development.sqlite3
log/development.log

我已将它们从本地计算机和服务器上的跟踪中删除:

git rm --cached db/development.sqlite3
git rm --cached log/development.log

然后我从本地计算机推送到 repo,并使用

拉到服务器
git pull origin master

我仍然收到此错误:

error: The following untracked working tree files would be removed by merge:
        db/development.sqlite3
        log/development.log
Please move or remove them before you can merge.

我不希望这些文件被覆盖或删除,我只想让 git 提取所有内容并忽略存储我的数据库信息的现有文件。我该如何克服这个问题?

【问题讨论】:

    标签: git sqlite gitignore git-pull


    【解决方案1】:

    这里有 2 个“解决方案”。 您可以将文件复制到其他地方,进行拉取,完全删除它们,推送然后复制回其他文件。

    或者你可以这样做

    git stash
    git pull
    git stash pop
    

    这将导致文件在服务器上被删除,但它们将保留在本地。之后,由于您的 .gitignore,您无需再次执行此操作。该文件将仅应用于尚未跟踪的文件。

    【讨论】:

    • 两件事——这会将未跟踪的文件藏起来吗?后面的pull怎么办,他们不会也冲突吗?我也想过把它们藏起来,但我不太确定这两个细节。
    • 我不确定藏匿处。但是暂时将它们复制到其他地方,拉动,删除文件,将其推回然后将文件复制回去。
    【解决方案2】:

    这样做:

    $ mv db/development.sqlite3 db/development.sqlite3_bak
    $ mv log/development.log log/development.log_bak
    
    $ git pull
    $ rm db/development.sqlite3 log/development.log
    
    $ mv db/development.sqlite3_bak db/development.sqlite3
    $ mv log/development.log_bak log/development.log
    

    【讨论】:

    • 这看起来可行,但 db/ 文件是我所有的数据库数据。如果我想经常更新我的网站,我必须在每次拉取更新时来回移动文件,而我宁愿能够轻松拉取。
    • 不,你不会,因为从现在开始你已经将它们添加到.gitignore,git 会忽略它们。
    • 所以如果我理解正确的话,你基本上是将文件复制到新的 _bak 文件中,然后在拉取之后,将它们复制回原始文件名?我想我只是对为什么 .gitignore 不从一开始就忽略它们感到困惑?
    • 因为它们已经存在于远程仓库中,因此git pull 会将它们带到您的本地仓库中。
    • 这似乎奏效了,我唯一需要做的不同是在pull 之前执行rm 命令,它是git rm 而不仅仅是rm。跨度>
    猜你喜欢
    • 2015-01-06
    • 2013-01-03
    • 1970-01-01
    • 2016-12-31
    • 2021-04-18
    • 1970-01-01
    • 2015-12-21
    • 1970-01-01
    • 2018-10-10
    相关资源
    最近更新 更多