如何使用 Git 对远程存储库进行初始推送?

Posted

技术标签:

【中文标题】如何使用 Git 对远程存储库进行初始推送?【英文标题】:How do I do an initial push to a remote repository with Git? 【发布时间】:2011-01-21 04:35:41 【问题描述】:

我已经阅读了无数的教程,但我总是觉得很短。这是我得到的:

我正在我的 Windows 桌面上运行 RubyMine 我已经按照他们的instructions 在我的 WebFaction 托管帐户上安装了 Git Git 似乎在两台机器上都运行良好

这就是我正在做的事情:

    在服务器上: mkdir project git init git add . git commit #==> nothing to commit 在客户端: 在 RubyMine 中创建新项目 Git init 在项目的***目录中 推送更改到 server #==> failed to push some refs to...

我缺少哪些步骤?

【问题讨论】:

【参考方案1】:

在服务器上:

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

请注意,当您添加源时,您可以使用多种格式和架构。我建议你看看你的托管服务提供什么。

【讨论】:

我唯一改变的是,因为我正在使用 RubyMine,所以我用它的 66 个默认文件创建一个 rails 项目替换了 touch .gitignore。非常感谢! 感谢列出命令。这也是我设置远程存储库的方式。 我应该补充一点,如果你希望其他人与你合作处理这个 repo,你应该在git --bare init 命令的末尾添加--shared。这将设置必要的权限。 感谢您的回答。有这样的东西来填补非常好的 git 书籍中缺少的东西是非常有帮助的,但仍然没有涵盖 CVS 的大量转换工作。 我喜欢第一次运行git push --set-upstream origin master 而不是git push origin master。这允许我每次只输入git pushgit pull 而不是git push origin master。任何适合您的喜好。【参考方案2】:

你可以试试这个:

在服务器上:

将新组添加到/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

会有帮助的。

【讨论】:

【参考方案3】:

如果您的项目没有上游分支,也就是说,如果这是远程存储库第一次知道在您的本地存储库中创建的分支,则以下命令应该可以工作。

git push --set-upstream origin <branch-name>

【讨论】:

【参考方案4】:

您必须在提交之前将at least one file 添加到存储库,例如.gitignore.

【讨论】:

我想我尝试使用它的方式是最初从我的客户端添加文件,因为那是我编写代码的地方。这在 git 中是否在概念上不合适?我需要先在客户端提交,然后再推送到服务器吗?【参考方案5】:

@Josh Lindsey 已经回答得很好。但是因为经常使用ssh,所以想补充一点。

因此只需改变:

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

到:

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

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

【讨论】:

【参考方案6】:

您需要在客户端上设置远程存储库:

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

【讨论】:

我运行了那个命令,但是“git push origin master”仍然导致“无法推送一些参考”。我尝试做一个“git pull origin master”并收到一个“找不到远程 ref master”。 我不确定这是否有所作为,但我的远程存储库是使用 @Josh Lindsey 建议的 git --bare init 创建的。 我遇到了同样的问题“无法推送一些引用”......试图将主分支从一个仓库推送到我创建的一个......然后我注意到源没有主分支- 确保您尝试推送的分支存在:)【参考方案7】:

我知道现有的答案可以解决问题。对于 git 新手,截至 2021 年 2 月 11 日,git 中的默认分支是 "main" 而不是 "master" 分支,命令将是

git push -u origin main

【讨论】:

这仍然是一个持续的过程,似乎适用于 GitHub github.com/github/renaming 和 GitLab 上的新存储库 about.gitlab.com/blog/2021/03/10/new-git-default-branch-name【参考方案8】:

在命令下运行

git config --local -e

更改条目

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

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

【讨论】:

【参考方案9】:

如果您遇到@dangerous-dev 提到的事件,但您有一个名为 master 的本地默认分支和一个名为 main 的远程分支,请使用:

git push -u origin master:main

分别使用长版:

git push --set-upstream origin master:main

【讨论】:

以上是关于如何使用 Git 对远程存储库进行初始推送?的主要内容,如果未能解决你的问题,请参考以下文章

sh 如何使用Git初始推送到远程存储库

如何将新的本地分支推送到远程 Git 存储库并对其进行跟踪?

如何在远程存储库上使用 git bisect?

如何将多个 Git 提交(已推送)还原到已发布的存储库?

如何使用其他用户凭据撤消对 GitHub 的意外推送

Git 推送:“致命的 'origin' 似乎不是 git 存储库 - 致命的无法从远程存储库读取。”