我在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上提交回购?
答案 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存储库,你可以使用一个四步过程:
origin
),用于存储https://github.com/path/to/repo.git
; git fetch
以收集其他 Git中的所有提交,该提交通过该https
"电话号码&#来接听互联网电话34 ;;最后git checkout master
,使用您在存储库中创建的第3步名称master
找到的相同提交,在新存储库中创建一个名为origin/master
的新分支,基于他们的 Git已经他们的 master
。或者,您可以运行git clone
,为您执行这些步骤。
无论哪种方式,现在都有两个 Git存储库。
但还有另外一件需要注意的事情。
使用"创建存储库" GitHub Web界面上的按钮,确实在那里创建了一个Git存储库。现在,您可以使用点击框和下拉菜单按钮选择是使用README文件和/或.gitignore
文件和/或LICENSE文件创建它。
为了创建一个包含文件的存储库,GitHub实际上必须首先创建一个完全空的存储库,然后立即添加一个提交,其内容是您选择的文件。
他们声称:
这将让您立即将存储库克隆到您的计算机。如果要导入现有存储库,请跳过此步骤。
但事实并非如此。您也可以立即克隆空存储库。问题是空存储库表现得相当奇怪。
现在,如果您使用git init
创建自己的存储库,那么这些存储库也是空的。他们的行为也很奇怪,但你可能没有注意到,因为一旦你第一次提交,他们就会开始正常行事......任何奇怪的事情都可以很容易地被写下来。对于git clone
命令来说情况并非如此,它确实希望以git checkout
步骤结束。
但是,您可以克隆空存储库。结果是另一个空的存储库。然后,您可以在此处创建第一个提交,并使用git push
将其发送回GitHub上的(仍为空)存储库。在克隆中创建提交后,它不再为空,并且它开始正常运行;当你运行git push
时,你的Git会在存储的"电话号码"上调用GitHub上的Git,向他们发送你的提交,让他们创建一个master
分支,或者你实际创建和推送的任何分支,现在他们的存储库也开始正常运行。
如果你考虑上面的内容,你会看到你可以让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。