- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 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/
我是一名优秀的程序员,十分优秀!