【问题标题】:Why is git not pushing contents of a folder?为什么 git 不推送文件夹的内容?
【发布时间】:2012-04-26 08:11:48
【问题描述】:

将文件夹“myapp”复制到我的工作文件夹后,我执行以下操作将其添加到暂存区:

git add .

然后提交更改:

git commit

然后我将更改推送到 Heroku:

git push heroku master

所以我的文件夹“myapp”存在于 heroku 上,但问题是它完全是空的。

当我执行以下操作时,

git clone myapp myapp2

该文件夹在我的本地计算机上正确克隆,包含所有预期的子内容。

有谁知道为什么子文件夹的内容没有被正确推送到 Heroku?我做错了什么?

回答以下问题:

  1. 我正在我的顶级文件夹(包含文件夹 myapp 的文件夹)中执行 git add .。执行git status 显示`没有添加到提交的更改(使用“git add”和/或“git commit -a”)
  2. 是的,myapp 包含文件/文件夹(我的 django 项目)
  3. 我删除了我的 .gitignore 文件,因为我将我的虚拟环境放在另一个地方,所以它不再在我的项目文件夹中,所以我认为这不会影响它。

【问题讨论】:

  • 您是在myapp 文件夹中还是在其他地方做git add .?提交后git status 会显示什么?
  • myapp 文件夹中有文件吗?因为git不跟踪目录,只跟踪目录内的文件。
  • .gitignore 是否排除了文件?
  • 我用这些问题的答案更新了问题。奇怪的是 git status 显示no changes to commit.

标签: django git heroku


【解决方案1】:

好的,我似乎已经解决了这个问题。不知何故,git 进入了一个奇怪的状态。我不太明白怎么做,但由于某种原因,它没有在文件夹中添加任何文件。

我只是复制了那个文件夹并给它一个新名称,然后按照我一直在做的完全相同的过程,它终于正确上传了。

【讨论】:

    【解决方案2】:

    默认情况下,您无法将更改推送到存储库的签出分支。它通常会导致重大问题!以下是通常发生的情况:

    $ git push heroku 大师 ...错误消息...heroku ! [远程拒绝] master -> master(当前已签出分支) 错误:未能将一些引用推送到“heroku

    由于您没有提及任何错误消息,我假设您已将以下内容添加到您的 heroku 存储库配置中,或者您运行的是相当旧的 Git 版本:

    [收到] 拒绝当前分支 = 假

    每当您将新版本推送到您的 heroku 存储库时,您似乎都想检查主分支的新副本。这可以通过接收后挂钩来实现。在您的heroku 存储库.git/hooks/post-receive 中创建一个文件,并授予它+x 权限。

    #!/bin/sh
    while read oldrev newrev refname
    do
        if test "$refname" = refs/heads/master
        then
            ( cd ..; GIT_DIR=.git; git reset --hard )
        fi
    done
    

    现在,每当您将新的 master 分支推送到 heroku 时,挂钩都会运行并检查新分支。有更好的方法来做这种事情,但这很简单。

    总结:默认情况下,当您推送更改时,它只会更改历史记录,而不会更改工作树。假设有人可能正在处理那棵树,所以对它做任何事情都可能具有破坏性。

    【讨论】:

    • 我没有收到任何错误消息,奇怪的是,如果我创建一个名为 TestFolder 的新子文件夹并在其中创建一个名为 TestFile.txt 的文本文件,那么它确实被推送到 heroku .然而myapp 文件夹仍然是空的,我存储了我的 Django 应用程序。
    • 1) 尝试在客户端执行git ls-tree -r --name-only master。如果这没有显示您的所有文件,那么您还没有提交它们。 2) 如果显示所有文件,请尝试在服务器上执行git reset --hard master 以检查它们。 3) 如果这不起作用,请在客户端和服务器上运行git rev-parse master,看看它们是否匹配。
    • 1) 此命令显示所有文件 2) 当我在服务器上运行该命令时,我得到fatal: ambiguous argument 'master': unknown revision or path not in the working tree。但是git status 表明我在分支大师。当我执行git reset --hard 时,我得到fatal: Failed to resolve 'HEAD' as a valid ref
    • 如果 HEAD 不是一个有效的参考,那么看起来你还没有签出任何东西。在服务器上试试git checkout master,或者在服务器端试试看。
    • 好的,我不再收到该错误消息。我想我做了一些奇怪的事情来得到它。但是我在这个问题上还没有取得进展。我只是仍然不明白如何使用文本文件创建一个单独的文件夹并正确提交,但是这个 Django 应用程序文件夹是完全空的。在这两种情况下,我都遵循相同的过程。我对git不是很熟悉,但逻辑告诉我,如果我遵循相同的过程并得到不同的结果,可能是文件夹的内容无法识别有问题?
    猜你喜欢
    • 2020-10-24
    • 2012-07-30
    • 1970-01-01
    • 1970-01-01
    • 2023-02-06
    • 2012-02-25
    • 2013-05-07
    • 1970-01-01
    • 2013-05-25
    相关资源
    最近更新 更多