创建GitHub存储库是否会创建Git存储库?

时间:2017-10-19 00:42:40

标签: git github version-control repository

我在GitHub上创建了许多存储库,但还没有将它们上传到Git。

在GitHub上下载我的存储库时,使用repo文件列表右上角的绿色按钮,我注意到你可以使用链接通过Git下载repo,即使我还没有将回购上传到Git。我还注意到链接看起来像这样:https://github.com/Dog-Face-Development/Bars.git,并指向Bars.git(或任何回购邮件的名称)文件,我在文件中没有这个文件列表。

问题是:因为我可以通过Git下载我的GitHub回购,即使我还没有将回购上传到Git,并且因为似乎有一个.git扩展名的文件,这意味着我的repo会在没有我做任何事情的情况下自动上传并添加到Git中,然后我可以使用我的计算机和命令行Git工具在Git上提交回购?

3 个答案:

答案 0 :(得分:5)

  

问题是:因为我能够通过Git下载我的GitHub回购,即使我还没有将回购上传到Git,并且因为似乎有.git文件,这是否意味着我的回购是自动上传...

(强调我的)

没有。但是,您在主题行中提出的问题的答案是"是":创建GitHub存储库会创建一个Git存储库。

这里棘手的部分是GitHub存储库 Git存储库。 GitHub添加了什么(他们的"附加值"作为服务)是好的,不止一件事,所以让我们说包括而不是他们的计算机上,在那里备份,可以从网络上访问,等等。

他们 - GitHub - 还添加了一堆通信分层,例如一键式"拉取请求"和叉子等等。但是所有启动,他们创建了一个Git存储库。

问题是,他们的 Git存储库,此时完全独立于您的 Git存储库,如果您还有一个存储库!

两个不同(独立)Git存储库相互通信的方式,至少通常是使用git fetch和/或git push。这些Git命令告诉你的Git调用其他一些Git,通常是通过一些http或https或ssh地址。一旦你的Git通过任何通信渠道与其他Git交谈 - 我喜欢称之为电话交谈,这对于那些使用智能手机拨打实际电话的人来说可能是有意义的:-) - 你的Git和他们的Git交换有关谁提交的信息,一个Git(发送者)将提交和其他对象发送给另一个Git(接收者)。

如果还没有Git存储库,你可以使用一个四步过程:

  1. 创建一个新的,完全空的存储库;
  2. 添加远程(通常名为origin),用于存储https://github.com/path/to/repo.git;
  3. 等网址
  4. 在这个新的空存储库中运行git fetch以收集其他 Git中的所有提交,该提交通过该https"电话号码&#来接听互联网电话34 ;;最后
  5. 运行git checkout master,使用您在存储库中创建的第3步名称master找到的相同提交,在新存储库中创建一个名为origin/master的新分支,基于他们的 Git已经他们的 master
  6. 或者,您可以运行git clone,为您执行这些步骤。

    无论哪种方式,现在都有两个 Git存储库。

    但还有另外一件需要注意的事情。

    GitHub可以创建一个完全空的存储库,或者一个具有1个提交

    的存储库

    使用"创建存储库" GitHub Web界面上的按钮,确实在那里创建了一个Git存储库。现在,您可以使用点击框和下拉菜单按钮选择是使用README文件和/或.gitignore文件和/或LICENSE文件创建它。

    为了创建一个包含文件的存储库,GitHub实际上必须首先创建一个完全空的存储库,然后立即添加一个提交,其内容是您选择的文件。

    他们声称:

      

    这将让您立即将存储库克隆到您的计算机。如果要导入现有存储库,请跳过此步骤。

    但事实并非如此。您也可以立即克隆存储库。问题是空存储库表现得相当奇怪。

    现在,如果您使用git init创建自己的存储库,那么这些存储库也是空的。他们的行为也很奇怪,但你可能没有注意到,因为一旦你第一次提交,他们就会开始正常行事......任何奇怪的事情都可以很容易地被写下来。对于git clone命令来说情况并非如此,它确实希望以git checkout步骤结束。

    但是,您可以克隆空存储库。结果是另一个空的存储库。然后,您可以在此处创建第一个提交,并使用git push将其发送回GitHub上的(仍为空)存储库。在克隆中创建提交后,它不再为空,并且它开始正常运行;当你运行git push时,你的Git会在存储的"电话号码"上调用GitHub上的Git,向他们发送你的提交,让他们创建一个master分支,或者你实际创建和推送的任何分支,现在他们的存储库也开始正常运行。

    如果你让他们进行1次提交,但你自己做了第一次提交怎么办?

    如果你考虑上面的内容,你会看到你可以让GitHub创建一个存储库并在其中放置一个提交,然后你可以git init你自己的存储库并在其中放入你自己的第一个提交。然后,您可以git add origin https://github.com/...设置您的 Git以致电他们的 Git,然后尝试运行git fetch

    这样可以正常工作。你的Git将调用他们的Git并让他们的Git向他们发送他们的提交,这将是他们的单一root提交,包含自述文件,忽略文件和/或许可证文件。您的Git会在Git的origin/master名称下记录该提交的哈希ID。

    与此同时,您自己的Git在您的master名下记录了您的首次提交。你的第一次提交有你放入的任何内容 - 也许是最多三个GitHub将为你创建的文件。

    关于这一点的奇怪之处在于这两个提交都是root提交。他们有一个提交,这与你的一个提交无关;现在你有了他们的一个提交,你的提交。

    你可以要求你的Git 合并这两个提交。某些版本的Git会毫无疑问地这样做。较新版本(2.9或更高版本)将反对:嘿,您的master及其origin/master似乎无关!要让这些较新的Gits合并这些不相关的历史记录,您必须添加--allow-unrelated-histories选项。有关详细信息,请参阅VonC's answer to a related question

答案 1 :(得分:2)

GitHub是一个Git存储库托管。 您在GitHub上创建存储库,然后您可以通过Git克隆并在那里提交。

根据建议,只需按照introduction guide

答案 2 :(得分:2)

  

因为我可以通过Git下载我的GitHub回购,即使我还没有将回购上传到Git

在GitHub上初始化的存储库,由您在创建时间接创建,是bare repository

  

...并且因为似乎有一个.git文件

这是文件。 .git后缀(不是文件扩展名)只是裸存储库的命名约定。

  

...这是否意味着我的repo会自动上传并添加到Git而不需要我做任何事情,然后我可以使用我的计算机和命令行Git工具提交到Git上的repo

没有。远程的,空的,裸的存储库,只是"上传"在您的第一个git push命令中使用您的代码从本地仓库

经验法则:Git上的所有内容都发生在本地,您只会更改您的"遥控器"无论什么时候推送,都会使用GitHub。