为什么git没有推送文件夹的内容?

时间:2012-04-13 23:45:30

标签: django git heroku

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

git add .

然后提交更改:

git commit

然后我将我的更改推送到Heroku:

git push heroku master

所以我的文件夹名为'myapp'出现在heroku上,但问题是它完全是空的。

当我执行以下操作时,

git clone myapp myapp2

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

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

回答以下问题:

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

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

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

$ git push heroku master
...error messages...
To heroku
 ! [remote rejected] master -> master (branch is currently checked out)
error: failed to push some refs to 'heroku'

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

[receive]
        denyCurrentBranch = false

听起来,只要将新版本推送到heroku存储库,就要查看主分支的新副本。这可以通过post-receive hook实现。在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,钩子都会运行并检出新分支。有更好的方法来做这种事情,但这很简单。

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