首页 文章

什么是“git remote add ...”和“git push origin master”?

提问于
浏览
266

很多时候,Git和Rails看起来像魔术......比如在_1340249中,它谈到了Git:

git remote add origin git@github.com:peter/first_app.git
git push origin master

它几乎没有说太多关于它们是什么,并开始谈论分支 . 在网上搜索显示 git remote add 是要添加"short name",例如 origin ,它也可以是任何名称,这就像URL的别名 . 并且 origin 是远程仓库所指向的通常路径 . (http://git-scm.com/book/en/Git-Basics-Working-with-Remotes下"Adding Remote Repositories")

那么为什么URL不是 git://git@github.com/peter/first_app.git 而是在其他语法中 - 它是什么语法?为什么它必须以 .git 结束?我最后尝试不使用 .git 它也有效 . 如果不是 .git ,还有什么呢? git@github.com 中的 git 似乎是git服务器上的用户帐户?

另外,为什么使用 git push origin master 需要如此冗长?默认不能是origin和master吗?我发现第一次需要 origin master ,但经过一个小的编辑和提交后, git push 就是它所需要的全部(不需要 origin master ) . 知道发生了什么的人可以提供一些细节吗?

有时候感觉就像没有任何解释的魔法......有时使用它的人是如此自信,当被问到为什么时,无法解释它,并回答“就像它的方式” . 有时非常务实和务实 . 实践并不坏,但可能不实际到不知道发生了什么 .

5 回答

  • 0

    git 就像UNIX . 用户友好但对其朋友挑剔 . 它与shell管道一样强大且用户友好 .

    话虽这么说,一旦你了解它的范例和概念,它就具有与UNIX命令行工具相同的清晰度 . 你应该考虑花些时间阅读在线提供的众多优秀git教程之一 . Pro Git书是一个很好的起点 .

    回答你的第一个问题 .

    • 什么是 git remote add ...

    您可能知道, git 是一个分布式版本控制系统 . 大多数操作都在本地完成 . 为了与外界沟通, git 使用了所谓的 remotes . 这些是本地磁盘上的存储库以外的存储库,您可以对其进行更改(以便其他人可以看到它们)或 pull (以便您可以进行其他更改) . 命令 git remote add origin git@github.com:peter/first_app.git 创建一个名为 origin 的新远程位于 git@github.com:peter/first_app.git . 执行此操作后,在推送命令中,您可以按 origin 而不是键入整个URL .

    • 什么是 git push origin master

    这是一个命令,说“将名为 master 的本地分支中的提交推送到名为 origin 的远程” . 执行此操作后,您上次与源同步的所有内容将被发送到远程存储库,其他人将能够在那里看到它们 .

    现在关于运输(即 git:// )的意思 . 远程存储库URL可以有多种类型( file://https:// 等) . Git只依赖于传输提供的身份验证机制来处理权限和内容 . 这意味着对于 file:// URL,它将是UNIX文件权限等 . git:// 方案要求git使用自己的内部传输协议,该协议针对发送git变更集进行了优化 . 至于确切的URL,它是这样的,因为github设置其 git 服务器的方式 .

    现在冗长 . 您可以告诉git这样的命令,例如“这里名为 master 的分支”是名为_134021_的远程名为 foo 的分支的本地镜像 . 在git中,这意味着 master 跟踪 bar/foo . 当您第一次克隆时,您将获得一个名为 master 的分支和一个名为 origin 的远程(您从中克隆),并使用本地主设置来跟踪原始主数据 . 设置完成后,您可以简单地说 git push 并且它会执行此操作 . 如果需要,可以使用更长的命令(例如 git push 可能会推送到官方公共仓库,而 git push review master 可用于推送到您的团队用来查看代码的单独远程) . 您可以使用 git branch 命令的 --set-upstream 选项将分支设置为跟踪分支 .

    从内到外,我更好地理解了这个问题 . 一旦了解了数据库如何在存储库中存储和维护,命令及其执行的操作就变得非常清晰 . 我做同意你的意见,许多 git 用户都有一些精英主义,但我也发现曾经有过UNIX用户,并且值得通过它们来学习系统 . 祝好运!

  • 5

    更新:请注意,当前接受的答案会延续common misunderstanding关于 git push 的行为,尽管有评论指出,但仍未更正 .

    您对遥控器的总结 - 就像存储库URL的昵称 - 是正确的 .

    那么为什么URL不是git://git@github.com/peter/first_app.git但是在其他语法中 - 它的语法是什么?为什么它必须以.git结尾?我最后尝试不使用.git,它也有效 . 如果不是.git,还有什么呢?初学者的git似乎是git服务器上的用户帐户?

    您提到的两个URL表明应该使用两种不同的传输协议 . 以 git:// 开头的那个用于git协议,它通常仅用于对存储库的只读访问 . 另一个是 git@github.com:peter/first_app.git ,是通过SSH指定对存储库的访问的不同方式之一 - 这是the documentation中描述的"scp-style syntax" . scp样式语法中的用户名是 git 是因为GitHub处理识别用户的方式 - 实际上忽略了用户名,并且基于用于进行身份验证的SSH密钥对来识别用户 .

    至于 git push origin master 的详细程度,您已经注意到在第一次推送之后,您可以执行 git push . 这是因为一系列难以记住但通常有用的默认值:)

    • 如果未指定远程,则使用为当前分支配置的远程(在您的情况下为 remote.master.url ) . 如果没有设置,则使用 origin .

    • 如果没有指定"refspec"(例如 mastermaster:my-experiment 等),则git默认推送与远程分支同名的每个本地分支 . 如果你的存储库和远程存储库之间只有一个名为 master 的分支,那就像将 master 推送到远程 master 一样 .

    就个人而言,由于我倾向于有许多主题分支(通常是几个遥控器),我总是使用以下形式:

    git push origin master
    

    ...以避免意外推动其他分支 .


    回答你对其他答案之一的评论,听起来好像是以非常有效的方式自上而下地学习git - 你发现默认设置有效,而你的问题是询问原因;)更严重的是,git可以像SVN一样简单地使用,但是对于遥控器和分支的了解意味着你可以更灵活地使用它,这可以真正改变你的工作方式 . 你对一学期课程的评论让我想起了Scott Chacon在一个播客采访中所说的话 - 学生们会学习计算机科学和软件工程中的各种基本工具,但很少有版本控制 . 分布式版本控制系统(如git和Mercurial)现在非常重要,而且非常灵活,因此值得教授课程,以便为人们提供良好的基础 .

    我的观点是,使用 git ,这种学习曲线绝对值得 - 使用大量主题分支,轻松合并它们,并且一旦您对系统充满信心,在不同的存储库之间推送和拉动它们就非常有用 . 不幸的是:

    • git的主要文档很难为新手解析 . (虽然我认为,如果你谷歌几乎任何git问题,有用的教程材料(或Stack Overflow答案:))现在出现 . )

    • git中有一些奇怪的行为现在很难改变,因为许多脚本可能依赖它们,但却让人感到困惑 .

  • 38
    • 存储库名称末尾的 .git 只是一个约定 . 通常,在git服务器上,存储库保存在名为 project.git 的目录中 . 当仅指定 project 时,git客户端和协议通过测试 project.git 来遵守此约定 .

    • git://git@github.com/peter/first_app.git 不是有效的git网址 . 可以通过指定here的各种url方案来识别和访问git存储库 . git@github.com:peter/first_app.git 是该页面上提到的 ssh 网址 .

    • git 很灵活 . 它允许您跟踪任何存储库的几乎任何分支的本地分支 . 而 master (您的本地默认分支)跟踪 origin/master (远程默认值分支)是一种流行的情况,它不是普遍的 . 很多时候你可能不想这样做 . 这就是为什么第一个 git push 如此冗长 . 当你执行 git pullgit push 时,它告诉git如何处理本地 master 分支 .

    • git pushgit pull 的默认设置是使用当前分支的远程 . 这是一个比origin master更好的默认值 . git push确定的方式解释为here .

    git 相当优雅和易于理解,但有一个学习曲线可以走过 .

  • 318

    你使用git可能是你是程序员 . 如果你是一个程序员,你可以理解变量是什么!

    看一下添加远程仓库的语法 .

    git remote add origin <url_of_remote repository>
    

    例:

    git remote add origin git@github.com:peter/first_app.git
    

    让我们剖析一下这个命令:

    git remote 这用于管理您的中央服务器以托管您的git存储库 .

    可能是您正在使用 Github 作为中央存储库的东西 . 我将举例说明 git remote add origin 命令

    假设我正在使用 GitHubBitBucket 作为git存储库的中央服务器,并在我的 first-app 项目的两个网站上创建了存储库 .

    现在,如果我想将我的更改推送到这两个git服务器,那么我需要告诉git如何访问这些中央存储库 . 所以我将不得不添加这些,

    For GitHub

    git remote add gh_origin https://github.com/user/first-app-git.git
    

    And For BitBucket

    git remote add bb_origin https://user@bitbucket.org/user/first-app-git.git
    

    我使用了两个变量(到目前为止我很容易将它们称为变量) gh_origin (gh FOR GITHUB)和 bb_origin (bb for BITBUCKET)只是为了解释你我们可以调用我们想要的任何东西 .

    现在,在进行一些更改后,我将不得不将所有这些更改发送(推送)到中央存储库,以便其他用户可以看到这些更改 . 所以我打电话

    Pushing to GitHub

    git push gh_origin master
    

    Pushing to BitBucket

    git push bb_origin master
    

    gh_origin 持有 https://github.com/user/first-app-git.git 的值, bb_origin 持有 https://user@bitbucket.org/user/first-app-git.git 的值

    这两个变量让我的生活更轻松

    因为每当我需要发送我的代码更改时,我需要使用这些单词而不是记住或键入相同的URL .

    大多数时候除了 origin 之外你什么都看不见,因为大多数时候你只会处理一个像Github或BitBucket这样的中央存储库 .

  • 1

    Git远程添加源:

    它将您的源代码集中到其他项目 . 它是基于Linux开发的,完全开源并使您的代码对其他git用户有用 . 我们将其称为参考

    使用git hub的远程url将代码推送到git存储库 .

相关问题