【问题标题】:Git push pushes nothingGit push 什么都不推送
【发布时间】:2014-03-15 23:00:41
【问题描述】:

我有 2 个远程仓库:一个在 bitbucket,另一个在 amazon ec2。我最近添加了第二个。

git remote -v

ec2 ubuntu@xx.xx.xx.xx:/home/ubuntu/my_app.git (fetch)
ec2 ubuntu@5xx.xx.xx.xx:/home/ubuntu/my_app.git (push)
origin  ssh://git@bitbucket.org/me/my_app.git (fetch)
origin  ssh://git@bitbucket.org/me/my_app.git (push)

当我推送原点时,它运行良好。但是当我推送到 ec2 时,它似乎也运行良好,但是通过 ssh 看不到它推送的任何内容。我已经完成了 2 次,但我那里没有来源。 这是 ec2 的 git 目录:

ubuntu@ip-xx-xx-xx-xx:~/my_app.git$ ls -al
total 40
drwxrwxr-x  7 ubuntu ubuntu 4096 Mar 15 01:52 .
drwxr-xr-x  6 ubuntu ubuntu 4096 Mar 15 01:50 ..
drwxrwxr-x  2 ubuntu ubuntu 4096 Mar 15 01:52 branches
-rw-rw-r--  1 ubuntu ubuntu   66 Mar 15 01:52 config
-rw-rw-r--  1 ubuntu ubuntu   73 Mar 15 01:52 description
-rw-rw-r--  1 ubuntu ubuntu   23 Mar 15 01:52 HEAD
drwxrwxr-x  2 ubuntu ubuntu 4096 Mar 15 12:04 hooks
drwxrwxr-x  2 ubuntu ubuntu 4096 Mar 15 13:30 info
drwxrwxr-x 10 ubuntu ubuntu 4096 Mar 15 13:30 objects
drwxrwxr-x  4 ubuntu ubuntu 4096 Mar 15 01:52 refs

我接受了这个建议 Can't push to repository on EC2 - Could not resolve hostname 将 ec2 添加为远程 git 存储库。

这是其中的一个推动因素:

$ git push ec2 master
Counting objects: 9, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (6/6), done.
Writing objects: 100% (6/6), 749 bytes | 0 bytes/s, done.
Total 6 (delta 3), reused 0 (delta 0)
To ubuntu@xx.xx.xx.xx:/home/ubuntu/my_app.git
   123..123abc  master -> master

注意:只有一个分支,gitk 正确显示所有内容。它只是不会向 ec2 推送任何内容。

【问题讨论】:

  • 未来观众请注意:ec2 上的 repo 是一个裸 repo。

标签: git amazon-web-services ssh amazon-ec2


【解决方案1】:

您在 EC2 实例上创建的存储库是一个裸存储库。因此,您不会在那里看到任何代码文件,只会看到您的仓库的git blobs。检查thisthis

检查代码是否真的被推送的方法是

ssh ubuntu@xx.xx.xx.xx #log-in to your EC2 server
git clone my_project my_project.git

现在在文件夹my_project 中,您将找到已检出的实际代码。

因此,在这种情况下,您的正常工作流程将类似于

git push ec2 master #from your dev machine
ssh ubuntu@xx.xx.xx.xx #log-in to your EC2 server
cd my_project
git pull origin master #after last clone, the original bare repo became the origin repo for this clone

在上述之后,您推送的任何新代码也将在这里可用。

编辑

在您的情况下,您已经在使用 bitbucket,因此我建议您探索这个工作流程 - 从 bitbucket 克隆 repo,并使用 bitbucket 作为参考点,无论是在 ec2 上还是从您的本地开发环境中。这将使您摆脱服务器上任何与备份相关的麻烦。您可以在 bitbucket 上添加多个 ssh 密钥,因此您需要在 ec2 上生成密钥并将公钥添加到 bitbucket。

所以在这种情况下,

  1. 将代码从您的 Dev 推送到 bitbucket
  2. SSH 到 ec2
  3. 在 ec2 上,使用 git clone https_bitbucket_url 克隆 bitbucket 存储库
  4. 或者在 ec2 上设置 ssh 密钥,现在使用git clone ssh_bitbucket_url
  5. 或者到一个新的非裸仓库,使用 bitbucket URL 添加一个新的远程。

【讨论】:

  • 所以我必须先做 a) git remote remove ec2 - 在 localhost b) git remote add origin "bitbucket-project-url" - 在 amazon ec2?
  • 是的,如果你想使用比特桶作为中心参考。我假设第二步在 ec2 上运行。如果要设置对 bitbucket 的 ssh 访问权限,请注意使用 ssh URL,否则使用 https URL。
  • 我很困惑,ec2 的 repo 还会保持“裸露”吗?如果它要做的是“git pull bitb master”,它真的必须是“裸露的”吗?也许我应该在 ec2 重新创建它作为一个普通的 repo(不是裸露的)。
  • 不,第二个 repo 将是一个非裸 repo。如果您需要一个裸仓库,我已经给出了相应的步骤。
  • git push ec2 master #from your dev machine - 你的意思可能是git push bitb_origin master #from your dev machine
猜你喜欢
  • 2012-11-07
  • 2014-04-30
  • 2014-12-26
  • 2010-10-24
  • 2019-03-17
  • 2020-11-11
  • 2013-08-15
  • 2013-04-08
  • 2019-08-19
相关资源
最近更新 更多