如何使用Git进行初始推送到远程仓库?

228

我已经阅读了无数份教程,但始终无法解决问题。以下是我的情况:

  • 我在Windows桌面上运行RubyMine
  • 根据WebFaction的说明,我已在我的WebFaction托管账户上安装了Git
  • Git在两台机器上似乎都正常运行

以下是我的操作步骤:

  1. 在服务器上:
    • mkdir project
    • git init
    • git add .
    • git commit #==> 没有可提交的更改
  2. 在客户端上:
    • 在RubyMine中创建新项目
    • 在项目顶层目录中执行Git init
    • 将更改推送到服务器,#==> 无法将某些ref推送到...

我漏掉了哪些步骤?

10个回答

495

在服务器上:

mkdir my_project.git
cd my_project.git
git --bare init

在客户端:

mkdir my_project
cd my_project
touch .gitignore
git init
git add .
git commit -m "Initial commit"
git remote add origin youruser@yourserver.com:/path/to/my_project.git
git push origin master

请注意,当您添加来源时,有几种格式和模式可供使用。建议查看您的托管服务提供的选项。


1
感谢列出这些命令。这也是我设置远程仓库的方式。 - Dave Bacher
5
我需要补充一点,如果你希望其他人与你协作此仓库,你需要在 git --bare init 命令的结尾添加 --shared。这会设置必要的权限。 - Josh Lindsey
谢谢你的回答。像这样填补了在Git很好的书籍中仍然没有涵盖CVS许多转换工作的空缺,非常有帮助。 - octopusgrabbus
32
我喜欢在第一次提交代码时使用“git push --set-upstream origin master”而不是“git push origin master”。这样就能够每次只需要输入“git push”或“git pull”,而不用每次都输入“git push origin master”。当然,具体使用方法可以根据个人偏好而定。 - Rick Smith
这对我几乎有用。我需要添加的唯一一件事是为git push origin master添加--set-upstream或-u标志。 所以当我改成git push -u origin master时,它对我有用,谢谢! - Realhermit
显示剩余5条评论

10
如果您的项目没有上游分支,也就是说,如果这是远程仓库第一次知道您在本地仓库中创建的分支,以下命令应该有效。
git push --set-upstream origin <branch-name>

8
您可以尝试以下操作:
在服务器上:
/etc/group添加新组,例如:
mygroup:1001:michael,nir

创建新的 Git 代码库:

mkdir /srv/git
cd /srv/git
mkdir project_dir
cd project_dir
git --bare init (initial git repository )
chgrp -R mygroup objects/ refs/ (change owner of directory )
chmod -R g+w objects/ refs/ (give permission write)

在客户端:

mkdir my_project
cd my_project
touch .gitignore
git init
git add .
git commit -m "Initial commit"
git remote add origin youruser@yourserver.com:/path/to/my_project.git
git push origin master

感谢Josh Lindsey提供的客户端代码。

在客户端之后,在服务器上执行以下命令:

cd /srv/git/project_dir
chmod -R g+w objects/ refs/

如果在git pull后遇到这个错误:
There is no tracking information for the current branch. Please specify which branch you want to merge with. See git-pull(1) for details

git pull <remote> <branch>
If you wish to set tracking information for this branch you can do so with:

git branch --set-upstream new origin/<branch>

尝试:

git push -u origin master

这将有所帮助。


7

我猜我尝试使用的方式是最初从我的客户端添加文件,因为那是我编写代码的地方。在git中这个概念是否不合适?我需要先在客户端提交然后再推送到服务器吗? - Donald Hughes

4

@Josh Lindsey已经回答得很好了。但由于我经常使用ssh,所以我想补充一些信息。

因此只需要更改:

git remote add origin youruser@yourserver.com:/path/to/my_project.git

to:

git remote add origin ssh://youruser@yourserver.com/path/to/my_project

请注意,域和路径之间的冒号已不再存在。

1

你需要在客户端上设置远程代码库:

git remote add origin ssh://myserver.com/path/to/project

我运行了那个命令,但是"git push origin master"仍然显示"failed to push some refs"。我尝试执行"git pull origin master",但收到了"couldn't find remote ref master"的错误提示。 - Donald Hughes
我不确定这是否有所区别,但是我的远程仓库是使用 git --bare init 命令创建的,正如 @Josh Lindsey 建议的那样。 - Dave Bacher
我遇到了相同的问题“无法推送一些引用”...试图从一个仓库将主分支推送到我创建的另一个仓库...然后我注意到源没有主分支-确保您要推送的分支存在 :) - Datum Geek

1

当你有一个本地的git仓库并且想要在这个现有的仓库上添加远程origin:

git remote add origin ssh://myserver.com/path/to/project
git pull origin main --allow-unrelated-histories
git push -u origin main

1

我知道已经有现成的答案可以解决这个问题。对于那些刚接触 git 的人来说,截至 2021 年 02 月 11 日,git 的默认分支是 "main" 而不是 "master" 分支。命令应该是:

git push -u origin main

这仍然是一个正在进行中的过程,似乎适用于 GitHub 上的新存储库 https://github.com/github/renaming 和 GitLab 已经开始使用 https://about.gitlab.com/blog/2021/03/10/new-git-default-branch-name/。 - escalator

0
如果你遇到了@dangerous-dev提到的问题,但是你本地有一个名为master的默认分支和一个名为main的远程分支,请使用以下命令进行推送:
git push -u origin master:main

分别使用长版本:

git push --set-upstream origin master:main

0

运行以下命令

git config --local -e

更改条目

url = git@github.com:username/repo.git

url = https://github.com/username/repo.git

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接