我在Joel的软件上读到:
使用分布式版本控制,分布式部分实际上不是最有趣的部分.
有趣的是,这些系统考虑的是变化,而不是版本.
在HgInit:
当我们必须合并时,Subversion会尝试查看两个版本 - 我的修改后的代码和修改过的代码 - 它会尝试猜测如何在一个大的邪恶混乱中将它们粉碎在一起.它通常会失败,产生并非真正冲突的"合并冲突"的页面和页面,只是Subversion无法弄清楚我们做了什么的地方.
相比之下,当我们在Mercurial中单独工作时,Mercurial正忙着保留一系列变更集.因此,当我们想要将我们的代码合并在一起时,Mercurial实际上有更多的信息:它知道我们每个人都改变了什么并且可以重新应用这些更改,而不仅仅是查看最终产品并试图猜测如何放置它一起.
通过查看SVN的存储库文件夹,我的印象是Subversion将每个修订版维护为变更集.据我所知,Hg正在使用变更集和快照,而Git纯粹使用快照来存储数据.
如果我的假设是正确的,那么必须有其他方法使DVCS中的合并变得容易.那些是什么?
*更新:
我想我已经知道答案,但我想我会问:
我们有一个文件被添加到Mercurial存储库中,其中包含敏感信息.有没有办法删除该文件及其更改历史记录而不删除整个回购?
我正在使用bitbucket git repo我有只读访问权限,所以我创建了一个fork来处理我的功能.
问题:如何更新我的fork以包含对所有者所做的原始仓库所做的更改?
在github上,似乎必须执行以下操作,因此我怀疑它与此类似:
$ git remote add upstream git://github.com/octocat/Spoon-Knife.git
$ git fetch upstream
$ git merge upstream/master
Run Code Online (Sandbox Code Playgroud)
我在Bitbucket文档中找不到任何关于forking的信息
是否可以克隆Mercurial存储库的一部分?假设存储库非常大,或者包含多个项目或多个分支.我可以只克隆部分存储库吗?
例如在Subversion中,你可能有trunk
和branches
.如果我只想获得主干(或其中一个分支),我可以请求[project]/trunk
.如果我克隆hg repo,我会获得trunk和所有分支.这可能是我不想要的很多信息.我可以避免这个吗?
或者,如果我想在一个hg仓库中拥有多个项目,我该怎么做?也就是说,我可能会得到其中一个项目并忽略其他项目.
git的目标之一是分散.如果Github是git的中心,那么也许它可以考虑到其他集线器,并允许拉取请求发生在github 上没有托管的git URL 上.
该文件是关于这个相当明确:拉请求需要你有一个Github上的帐户,你fork一个仓库在github上.这是一个真正的当前技术限制还是有办法在Github上解决这个问题?
如果没有,是否最终计划允许Github的"拉取请求"工具实际上允许从Github筒仓之外的存储库中提取?
我在GitHub(http://github.com/hrickards/PHP-Crypto)上有一个存储库用于我的一个小项目,其他几个正在研究.我的开发环境是Aptana Studio,我使用EGit插件,因为Aptana基本上是Eclipse.今天,设计师将网站的HTML和CSS发送到名为img的文件夹中.以前,图像位于名为images的文件夹中.没有考虑它,懒得更新CSS和HTML,我只是将图像保存在img目录中并提交给Git.但是,GitHub Web界面显示img和images目录,images目录为空.我尝试用git rm -r images
和删除images目录git rm images
,甚至mkdir images; git add images; git rm -r images
但是无论我尝试什么,我得到相同的结果:
fatal: pathspec 'images' did not match any files
.
有没有人对如何删除图像有任何建议,或者我误解了Git或其他什么?
我本来可以发誓有一种方法可以在hg repo中保留一个本地忽略文件,即一个类似于.hgignore功能的文件,但是没有检入回购.例如,如果正在使用不同的IDE,则可以使用它来忽略对IDE项目文件的更改.我很难找到它是如何完成的.有人回忆起细节吗?