gpt4 book ai didi

git push 到远程仓库,但似乎没有上传到仓库

转载 作者:行者123 更新时间:2023-12-04 16:08:37 25 4
gpt4 key购买 nike

我在 mac 上尝试“git push”到本地 repo 模拟器目录:

mkdir ~/gitremote
cd ~/gitremote
git init --bare

然后在另一个目录中:

git clone /Users/trosky/gitremote
vi readme (add one line)
git add .
git commit -m "1st file"
git push -u origin master

Counting objects: 2, done.
Writing objects: 100% (2/2), 211 bytes | 0 bytes/s, done.
Total 2 (delta 0), reused 0 (delta 0)
To /Users/trosky/gitremote/
c0a3498..ff5511b master -> master
Branch master set up to track remote branch master from origin.

一切似乎都很好。但是在~/gitremote下:

$ls
HEAD config hooks objects
branches description info refs

似乎根本没有上传“自述文件”。我尝试了几次这个测试,总是同样的问题。当我可以成功 git push 到 master 时会发生什么,而“远程”repo 没有任何东西。

最佳答案

Git 不推送文件。就此而言,存储库也不直接存储文件,无论如何(但请参阅接下来的几段)。存储库存储提交,而 git 推送提交。

--bare 克隆的全部意义在于避免有任何文件,这样就没有文件妨碍提交。如果那里确实有文件,它们可能会阻止更新提交。

您可能想知道:没有文件的系统有什么用?事实上,这根本没有好处,因此存储库存储提交,并且每个提交都代表一个完整的目录树的 快照 。然后,您可以指示 Git 从存储库中保存的所有提交集中提取 任何 提交。

现在,如果当你指示 Git 提取某个提交(将保存在该特定提交中的每个文件都保存在一个目录中),你需要给 Git 一个位置来放置这些文件。一个普通的、非--bare 存储库有一个特殊的地方,称为 work-tree(或有时 working-tree 或类似的)。此工作树允许您查看所有文件、更改它们、添加新文件、删除文件,然后从结果中进行 new 提交。

换句话说,工作树就是你工作的地方。

如果您在工作树中进行工作,并且 其他人 将提交 推送到您的存储库,并且该新提交用于替换您的工作-tree 与他们的 提交的树,你的 的所有工作会发生什么?这一切都会丢失!因此,当您的存储库有工作树时,Git 通常会拒绝推送到您的存储库。1

因此,Git 提供了 bare 存储库。裸存储库是没有工作树的存储库。没有工作树,没有人可以在其中工作,所以 push 不会丢失工作。因此,它是一个您可以随时安全推进的地方。这就是全部,但这很重要。

如果您想查看推送到裸存储库的提交(及其文件),您可以创建一个非裸克隆,然后从推送到存储库 fetch 到非裸克隆,然后 checkout 有问题的提交。这会将您的工作替换为他们的工作2——但既然 说“现在就做”,那么您必须是这个意思,而不是仅仅因为他们的工作粗暴地覆盖您的工作他们碰巧现在推了。

正如脚注所暗示的,对此有很多警告和调整,但这是基本设置。裸克隆纯粹是为了 push ,非裸克隆是你工作的地方。


1其实只有推到当前分支的时候,还是可以控制的。

2通常的 git checkout 也会尝试确保您不会丢失任何您自己未保存的工作。你可以告诉它“强制”覆盖你自己的工作,或者使用 git reset --hard 先丢弃你自己的工作,这里有很多复杂的边缘情况,但 Git 通常会处理所有 < em>提交的数据是永久的和不可磨灭的。工作树数据要少得多。

关于git push 到远程仓库,但似乎没有上传到仓库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41328255/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com