我想了解当我想安装库时git是如何工作的。假设我有一个名为foo的库,它有两个版本:foo-1.0
和foo-2.0
。所以,我运行git clone git://github.com/dartsim/dart.git
,它会下载所有源文件。然后,我决定要安装版本foo-1.0
。所以,我运行git checkout release-1.0
。然后,我使用mkdir build
创建一个构建目录,使用cd build
输入该目录,然后使用cmake ../src
和make install
构建和安装库。
好的,所以在build
文件夹中,有一个名为libfoo.so.1
的库。检查我的/usr/local/lib
目录后,安装后还会有libfoo.so.1
的副本。我还看到标题文件foo.h
已复制到/usr/local/include
。
现在,假设我还想在同一系统上安装foo-2.0
,而无需卸载foo-1.0
。例如,我可能已经使用git进行了更新,这需要我重新编译并重新安装最新版本。
安装的库和头文件会发生什么?我想在foo-2.0
目录中会创建一个build
,它也会被复制到/usr/local/lib
。但是,头文件怎么样?版本1和版本2之间有所不同,但源文件中只有一个副本。运行checkout release-2.0
,cmake ../src
和make install
只是使用版本2的头文件覆盖usr/local/include
的头文件?在这种情况下,如何在同一系统上使用两个版本的库?
我对checkout
如何运作以及它在装置方面的实际意义一般不太清楚......任何有助于清除这一点的帮助都会很棒,谢谢!
答案 0 :(得分:1)
git checkout为您提供了一个特定的分支。您可以在2个分支上拥有2个不同的版本。您的构建系统需要克隆您可以使用此命令执行的特定分支
git clone -b <branch name> <remote_repo>
你永远不会在同一个地方拥有相同代码的2个版本,基本上没有任何意义。
当您运行checkout命令时,它将切换到该特定分支中的该版本的代码。
这里有一点注意。 checkout命令不会删除您签出的最后一个分支中不存在的文件夹,因此您最终可以使用额外的文件夹。
通常,您不需要在构建过程中运行git checkout。只需克隆你想要的任何分支。
答案 1 :(得分:0)
听起来你可能习惯了不同的版本控制系统,比如SVN或ClearCase。
Checkout在Git中意味着完全不同的东西,不应该与安装或重复文件有任何关系。分支在技术上是指向提交的指针,提交成为新提交行的父级。这些文件不会重复,除非它们当前正在处理和更改,然后它们作为新提交的一部分的对象存在,即父级“分支”提交的子级。
签出分支不会更改任何依赖项或标头的访问或版本,除非您在签出该分支时专门更改它们。