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

Wil*_* V. 0 git version-control github repository

我在GitHub上创建了许多存储库,但尚未将它们中的任何一个上传到Git.

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

问题是:由于我可以通过Git下载我的GitHub仓库,即使我没有将仓库上传到Git,并且由于似乎有一个带.git扩展名的文件,这是否意味着我的仓库自动上传并添加没有我做任何事情的Git,然后我可以使用我的电脑和命令行Git工具承诺使用Git的回购?

tor*_*rek 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. 添加一个存储URL 的远程(通常是命名的origin)https://github.com/path/to/repo.git;
  3. git fetch在这个新的空存储库中运行以收集另一个 Git 中的所有提交,该提交在该https"电话号码" 处回答了因特网电话; 最后
  4. 运行git checkout master创建一个名为新的分支master使用相同的新信息库提交的名称为发现origin/master该步骤3在你的仓库的基础上,是什么缔造 Git有在他们的 master.

或者,您可以运行git clone,为您执行这些步骤.

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

不过,还有另外一件需要注意的事情.

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

当您使用GitHub Web界面上的"创建存储库"按钮时,它会在那里创建一个Git存储库.现在,您可以.gitignore使用clicky框和下拉菜单按钮选择是使用README文件和/或文件和/或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对相关问题的回答.