了解git和checkout

时间:2016-06-03 18:58:18

标签: git ubuntu makefile installation cmake

我想了解当我想安装库时git是如何工作的。假设我有一个名为foo的库,它有两个版本:foo-1.0foo-2.0。所以,我运行git clone git://github.com/dartsim/dart.git,它会下载所有源文件。然后,我决定要安装版本foo-1.0。所以,我运行git checkout release-1.0。然后,我使用mkdir build创建一个构建目录,使用cd build输入该目录,然后使用cmake ../srcmake 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.0cmake ../srcmake install只是使用版本2的头文件覆盖usr/local/include的头文件?在这种情况下,如何在同一系统上使用两个版本的库?

我对checkout如何运作以及它在装置方面的实际意义一般不太清楚......任何有助于清除这一点的帮助都会很棒,谢谢!

2 个答案:

答案 0 :(得分:1)

git checkout为您提供了一个特定的分支。您可以在2个分支上拥有2个不同的版本。您的构建系统需要克隆您可以使用此命令执行的特定分支

git clone -b <branch name> <remote_repo>

你永远不会在同一个地方拥有相同代码的2个版本,基本上没有任何意义。

当您运行checkout命令时,它将切换到该特定分支中的该版本的代码。

这里有一点注意。 checkout命令不会删除您签出的最后一个分支中不存在的文件夹,因此您最终可以使用额外的文件夹。

通常,您不需要在构建过程中运行git checkout。只需克隆你想要的任何分支。

答案 1 :(得分:0)

听起来你可能习惯了不同的版本控制系统,比如SVN或ClearCase。

Checkout在Git中意味着完全不同的东西,不应该与安装或重复文件有任何关系。分支在技术上是指向提交的指针,提交成为新提交行的父级。这些文件不会重复,除非它们当前正在处理和更改,然后它们作为新提交的一部分的对象存在,即父级“分支”提交的子级。

签出分支不会更改任何依赖项或标头的访问或版本,除非您在签出该分支时专门更改它们。