我正在尝试设置版本控制软件,目前我单独工作(但我希望能够更改),并且我想将代码存储在经常备份的网络驱动器上但是在我的相同代码上工作笔记本电脑的硬盘。
但是GIT让我很困惑!
因此,根据我的理解,我应该在笔记本电脑上创建个人存储库,然后将其推送或克隆到网络驱动器上的新中央存储库。这听起来不错吗?这是通过推送还是克隆来完成的?
我正在使用GIT-Extensions,他们有关于中央存储库的this to say:
中央存储库仅包含版本历史记录。因为一个 中央存储库没有工作目录,你无法结账 在中央存储库中进行修订。合并也是不可能的 拉动中央存储库中的更改。可以使用此存储库类型 作为公共存储库,开发人员可以将更改推送到或拉动 改变了。
所以这听起来像普通的SVN存储库?因为我可以从中获取代码并向其发送代码,但它不能从我那里获取代码并强制代码在我身上?听起来不错吗?
但如果这是对的,那么根据这个答案中的图表:What are the differences between "git commit" and "git push"?我的两个存储库是什么?它们是工作区和本地仓库,还是本地和远程回购?这是什么决定了我应该提交和检查或推拉?
答案 0 :(得分:16)
GIT让我很困惑!
您似乎来自集中式VCS背景,并且您显示了Joel here所描述的知识诅咒的症状。你只需要与Git的分布式性质达成协议。一切都很快就会有意义。 :)
一个好的起点是Pro Git书的以下段落,它有助于提高您的理解:http://git-scm.com/book/en/Getting-Started-About-Version-Control。
我应该在笔记本电脑上创建个人存储库,然后将其推送或克隆到网络驱动器上的新中央存储库。这听起来不错吗?
Git本身并没有在这方面做出任何处方,但是,它是一种广泛使用的合理设置。
这是通过推送还是克隆完成的?
推送表示从位于"您的存储库中的本地分支发送您的本地更改"生活在另一个存储库中的一个分支,称为"远程存储库"。
但是,这个术语可能会令人困惑,因为有问题的远程仓库实际上可以与您的存储库"位于同一台机器上。 "遥控"在Git中是一个相对而非绝对的术语。术语"远程存储库"应理解为正在考虑的本地存储库知道的其他存储库。
粗略地说,克隆意味着获取远程存储库的本地副本(它成为您的存储库")。
奖励:抓取表示“下载”#39;某些远程存储库中存在的所有更改到您的存储库"。
您需要在网络驱动器上创建/初始化存储库,然后设置本地存储库,以便与其进行通信(推送,获取等)。
我使用GIT-Extensions并且他们对中央存储库有这个说法:[...]
我认为通过Git-Extensions有助于误导。您考虑的存储库" central"可以裸(即只包含版本历史记录,没有任何工作副本),但它不一定非。
所以这听起来像普通的SVN存储库?
Git在本质上是分布式的,粗略地说,这意味着所有的存储库都是平等的;没有任何存储库比其他存储库更重要或更重要。也就是说,没有什么可以阻止您将一个特定的存储库视为中心/规范存储库。这是Git和集中式VCS之间的主要区别之一,例如SVN。
因为我可以从中获取代码并向其发送代码,但它无法从我那里获取代码并强制代码在我身上?
您决定在"您的存储库"中发生了什么。如果需要,您可以从另一个仓库获取更改或发送更改(假设您具有对它的写入权限),但后者不能从中获取任何内容或强制执行任何内容"您的存储库& #34;没有你明确要求它......除非控制那个远程仓库的人当然有写访问权。
但如果那是对的,那么根据这个答案中的图表:What are the differences between "git commit" and "git push"?我的两个存储库是什么?它们是工作区和本地仓库,还是本地和远程回购?
虽然我觉得这个描述有点误导,但作为第一个近似,你可以考虑每个回购由三个区域组成(见http://git-scm.com/book/en/Getting-Started-Git-Basics#The-Three-States)。
在the diagram you link to上,工作区,索引,存储库指的是"您的存储库&#34的三种状态;;远程存储库的三个状态未显示;远程仓库被描述为一个黑盒子。
这是决定我是应该提交,检查还是推拉的原因?
提交和签出是对您的存储库完全本地化的操作"。
推送和获取意味着在您的存储库"之间传输数据。和一些远程存储库,但方向相反:
拉包括获取然后自动将您刚从远程存储库获得的更改集成到您的存储库"。
答案 1 :(得分:3)
如果您还没有远程存储库,则必须clone
使用本地存储库。然后你push
到它。
您可以使用本地存储库正常工作。当您准备好修复时,首先commit
它到您的本地存储库。然后你需要push
到遥控器。
这一切听起来很混乱。这些想法是你可能希望在一段时间内独立工作并做出一堆本地修复和提交,然后再考虑你的工作准备就绪,将其推入主(远程)存储库,其他人将获得最新的更改
拥有本地存储库的想法是,您可以拥有远程所有的分支,甚至可以在本地存储库中创建更多自己的分支。您可以在自己的分支机构上开发自己的功能,而不会影响其他人的工作或受到他们的影响。