如何使用 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 push
或git 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 对远程存储库进行初始推送?的主要内容,如果未能解决你的问题,请参考以下文章