经常,Git 和 Ruby on Rails看起来很神奇......比如在first chapter of Ruby on Rails 3 Tutorial book ,它谈到了 Git:
git remote add origin git@github.com:peter/first_app.git
git push origin master
它几乎是在说“它只是有效”,但没有过多说明它们是什么,而是开始谈论分支。在网上查了一下,git remote add是加一个“简称”,比如origin,也可以是任意的名字,就像别名一样到一个 URL。
origin 是远程存储库指向的通常路径(在“添加远程存储库”下的 http://git-scm.com/book/en/Git-Basics-Working-with-Remotes 中)。
那么为什么 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 )。有知道的人可以提供一些细节吗?
有时它感觉就像很多没有解释的魔法......有时使用它的人非常自信,当被问及为什么时,无法解释,并回答“就是这样”之类的话。有时很务实和务实。务实一点不错,但可能不务实到不知道怎么回事。
最佳答案
Git 就像 Unix。它对用户友好,但对它的 friend 很挑剔。它与 shell 管道一样强大且用户友好。
话虽这么说,一旦您理解了它的范例和概念,它就具有我对 Unix 命令行工具所期望的 Zenlike 清晰度。您应该考虑抽出一些时间阅读网上提供的众多优秀 Git 教程之一。 Pro Git 这本书是一个很好的起点。
回答你的第一个问题。
什么是 git remote add ...?
您可能知道,Git 是一个分布式版本控制系统。大多数操作都在本地完成。为了与外界通信,Git 使用了所谓的“远程”。这些存储库不同于本地磁盘上的存储库,您可以将更改推送到其中(以便其他人可以看到它们)或从中 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 的远程分支”。执行此操作后,您上次与 origin 同步的所有内容都将发送到远程存储库,其他人将能够在那里看到它们。
现在谈谈传输(即 git://)的含义。远程存储库 URL 可以有多种类型(file://、https:// 等)。 Git 简单地依赖传输提供的身份验证机制来处理权限和其他事情。这意味着对于 file:// URL,它将是 Unix 文件权限等。 git:// 方案要求 Git 使用自己的内部传输协议(protocol),它针对发送 Git 变更集进行了优化。至于确切的 URL,这是因为 GitHub 设置其 Git 服务器的方式。
现在是冗长的。您键入的命令是通用命令。可以告诉 Git 类似“这里名为 master 的分支是名为 foo 的分支在名为 bar 的远程分支上的本地镜像”。在 Git 中,这意味着 master tracks bar/foo。当你第一次克隆时,你会得到一个名为 master 的分支和一个名为 origin 的远程分支(你克隆的地方),本地主集设置为跟踪 master产地。
设置完成后,您只需说 git push 即可。如果需要,可以使用更长的命令(例如,git push 可能会推送到官方公共(public)存储库,git push review master 可用于推送到单独的远程您的团队使用它来审查代码)。您可以使用 git branch 命令的 --set-upstream 选项将您的分支设置为跟踪分支。
我觉得 Git(与我使用过的大多数其他应用程序不同)从内到外更好理解。一旦您了解了数据在存储库中的存储和维护方式,命令及其作用就会变得非常清晰。我确实同意你的看法,许多 Git 用户中存在一些精英主义,但我也发现曾几何时,Unix 用户也是如此,值得通过他们来学习这个系统。祝你好运!
关于git - 什么是 "git remote add ..."和 "git push origin master"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5617211/
类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc
我正在尝试测试是否存在表单。我是Rails新手。我的new.html.erb_spec.rb文件的内容是:require'spec_helper'describe"messages/new.html.erb"doit"shouldrendertheform"dorender'/messages/new.html.erb'reponse.shouldhave_form_putting_to(@message)with_submit_buttonendendView本身,new.html.erb,有代码:当我运行rspec时,它失败了:1)messages/new.html.erbshou
我在从html页面生成PDF时遇到问题。我正在使用PDFkit。在安装它的过程中,我注意到我需要wkhtmltopdf。所以我也安装了它。我做了PDFkit的文档所说的一切......现在我在尝试加载PDF时遇到了这个错误。这里是错误:commandfailed:"/usr/local/bin/wkhtmltopdf""--margin-right""0.75in""--page-size""Letter""--margin-top""0.75in""--margin-bottom""0.75in""--encoding""UTF-8""--margin-left""0.75in""-
我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co
我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
为什么4.1%2返回0.0999999999999996?但是4.2%2==0.2。 最佳答案 参见此处:WhatEveryProgrammerShouldKnowAboutFloating-PointArithmetic实数是无限的。计算机使用的位数有限(今天是32位、64位)。因此计算机进行的浮点运算不能代表所有的实数。0.1是这些数字之一。请注意,这不是与Ruby相关的问题,而是与所有编程语言相关的问题,因为它来自计算机表示实数的方式。 关于ruby-为什么4.1%2使用Ruby返
为了将Cucumber用于命令行脚本,我按照提供的说明安装了arubagem。它在我的Gemfile中,我可以验证是否安装了正确的版本并且我已经包含了require'aruba/cucumber'在'features/env.rb'中为了确保它能正常工作,我写了以下场景:@announceScenario:Testingcucumber/arubaGivenablankslateThentheoutputfrom"ls-la"shouldcontain"drw"假设事情应该失败。它确实失败了,但失败的原因是错误的:@announceScenario:Testingcucumber/ar
它不等于主线程的binding,这个toplevel作用域是什么?此作用域与主线程中的binding有何不同?>ruby-e'putsTOPLEVEL_BINDING===binding'false 最佳答案 事实是,TOPLEVEL_BINDING始终引用Binding的预定义全局实例,而Kernel#binding创建的新实例>Binding每次封装当前执行上下文。在顶层,它们都包含相同的绑定(bind),但它们不是同一个对象,您无法使用==或===测试它们的绑定(bind)相等性。putsTOPLEVEL_BINDINGput
我可以得到Infinity和NaNn=9.0/0#=>Infinityn.class#=>Floatm=0/0.0#=>NaNm.class#=>Float但是当我想直接访问Infinity或NaN时:Infinity#=>uninitializedconstantInfinity(NameError)NaN#=>uninitializedconstantNaN(NameError)什么是Infinity和NaN?它们是对象、关键字还是其他东西? 最佳答案 您看到打印为Infinity和NaN的只是Float类的两个特殊实例的字符串