【问题标题】:How do I do an initial push to a remote repository with Git?如何使用 Git 对远程存储库进行初始推送?
【发布时间】:2026-02-14 15:25:04
【问题描述】:

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

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

这就是我正在做的事情:

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

我缺少哪些步骤?

【问题讨论】:

    标签: git version-control


    【解决方案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
          

          【讨论】:

          【解决方案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
            

            【讨论】: