【问题标题】:Understanding git and checkout了解 git 和结帐
【发布时间】:2016-06-03 18:58:17
【问题描述】:

当我想安装一个库时,我试图了解 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 进行了更新,这需要我重新编译并重新安装最新版本。

安装的库和头文件会发生什么?我猜在build 目录中会创建一个foo-2.0,它也会被复制到/usr/local/lib。但是,头文件呢?版本 1 和 2 不同,但源文件中只有一份副本。运行checkout release-2.0cmake ../srcmake install 是否会用版本2 的头文件覆盖usr/local/include 的头文件?在这种情况下,如何在同一系统上同时使用两个版本的库?

我只是不太清楚checkout 的工作原理以及它在安装方面的实际含义.....任何解决此问题的帮助都会很棒,谢谢!

【问题讨论】:

  • 这与gitcmake 无关,这些只是执行您告诉他们执行的操作的工具。您所追求的是共享库 soname 和版本控制(主要版本更新与次要版本更新)之间的区别。优秀的软件打包从业者将以这样的方式打包代码,您可以通过向cmake 提供不同的构建参数,从主分支构建foo-1.0foo-2.0checkout 应用于获取以前的 minor 版本,而不是用于获取以前的 major 版本。

标签: git ubuntu makefile installation cmake


【解决方案1】:

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

git clone -b <branch name> <remote_repo>

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

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

这里有一个注释。签出命令不会删除您签出的最后一个分支中不存在的文件夹,因此您最终可能会得到额外的文件夹。

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

【讨论】:

  • 谢谢,但我不明白它如何处理头文件。我知道如果我签出并安装这两个版本,将会安装两个库。但是,源目录中只有一个头文件。是否会为每个版本创建并安装此头文件的修改版本?
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-14
    • 2012-09-06
    • 2011-01-09
    • 1970-01-01
    • 1970-01-01
    • 2013-05-11
    • 2012-03-02
    • 1970-01-01
    相关资源
    最近更新 更多