【问题标题】:Git pushes entire project even if few files are changed. AWS即使更改了很少的文件,Git 也会推送整个项目。 AWS
【发布时间】:2014-01-29 22:12:35
【问题描述】:

我正在使用 Git 通过 Elastic Beanstalk 将我们的应用程序推送到 AWS。 AWS 已经创建了执行此操作的方法,尽管根据我的理解,它并不完全是一个传统的存储库。例如,我不能在我的 Beanstalk 项目中pull

我对@9​​87654323@ 期间发生的事情感到困惑,为什么有时它会推送比其他人更多的数据。我的典型流程如下

//create, edit files
$ git add .
$ git commit -m "message here"
[master 7d38f1f] message here
 5 files changed, 27 insertions(+), 19 deletions(-)
$ git aws.push
Counting objects: 5131, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (4930/4930), done.
Writing objects: 100% (5131/5131), 40.70 MiB | 391.00 KiB/s, done.
Total 5131 (delta 1487), reused 0 (delta 0)
remote: processing 
To https://exampleLocation
+ 7f9d9dd...7d38f1f HEAD -> master (forced update)

现在也许我会编辑一些文件并再次推送。这次它会更小/更快

$ git add .
$ git commit -m "message2"
[master e2f4412] message2
 1 file changed, 1 insertion(+)
$ git aws.push
Counting objects: 9, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (5/5), done.
Writing objects: 100% (5/5), 472 bytes | 0 bytes/s, done.
Total 5 (delta 3), reused 0 (delta 0)
remote: 
To https//exampleLocation
7d38f1f..e2f4412  HEAD -> master

明天,当我第一次推送时,它可能会再次成为大推送......

This 问题暗示只发送更改,在上面的示例中您可以看到这是正确的。但是,明天当我上班时,我的第一次推送可能与第一次相似。所以有人正在忘记发生了什么变化。我怎样才能记住它?

谢谢

【问题讨论】:

    标签: git amazon-web-services amazon-elastic-beanstalk git-push


    【解决方案1】:

    我原来的答案弄错了。这是更新版本。

    我们可以从 .git/config

    中看到
    [alias "aws.elasticbeanstalk"]
            remote = !.git/AWSDevTools/aws.elasticbeanstalk.push --remote-url
            push = !.git/AWSDevTools/aws.elasticbeanstalk.push
    
    [alias "aws"]
            push = !git aws.elasticbeanstalk.push
    

    git aws.push 是对 .git/AWSDevTools/aws.elasticbeanstalk.push Ruby 脚本的调用,其中包含以下代码:

    commit = opts[:commit] # if commit is specified with --commit
    commit = 'HEAD' if commit.nil?
    
    destined_env = opts[:env] || AWS::DevTools.environment()
    if !destined_env.nil?
      puts "Pushing to environment: #{destined_env}"
    end
    `git push -f #{remote} #{commit}:refs/heads/master`
    status = $?.exitstatus
    exit status
    

    在您的第一个日志中,您会看到注释 - (强制更新),而您在第二个日志中看不到。让我们深入了解一下“强制更新”。

    来自git-push手册:

    -f
    --强制
    通常,该命令拒绝更新不是用于覆盖它的本地引用的祖先的远程引用。这面旗帜 禁用检查。这可能会导致远程存储库丢失 提交;小心使用。

    Remote ref 至少在两种情况下可能不是祖先:

    • 当它是 ref 本身时,当尝试推送相同的提交时
    • 当其他人更新远程存储库并且您的提交必须覆盖他们的更改时

    我相信其中一个案例就是您的案例。

    或者它可能是 AWS 工具中的错误。以前有another issue,在本地进行更改后远程存储库不会更新。也许这就是解决方法 - 用力推动。

    我将深入研究这个问题,一旦我有更多信息,我会更新答案。

    【讨论】:

    • 我了解 ELB 不是存储库。我理解你所说的一切。不过,我的问题是,为什么有些推动力很大而有些推动力很小?我怎样才能让他们都保持小?必须有东西跟踪变化。这是在做什么?我怎样才能让它保持清醒和正常运行?
    • @TimSum 用详细信息更新了答案。仍有未解决的问题。
    猜你喜欢
    • 2016-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-22
    • 1970-01-01
    • 1970-01-01
    • 2011-08-12
    • 1970-01-01
    相关资源
    最近更新 更多