了解git:克隆和结帐之间的区别

时间:2016-06-02 13:51:28

标签: git github version-control

我对git clonegit checkout之间的差异感到有些困惑。例如,我正在尝试下载,编译和安装名为dart的C ++库。说明说要运行以下内容:

1. Clone the repository into a directory in your home folder:

git clone git://github.com/dartsim/dart.git

2. Change directory to the DART repository and change branch to release-6.0:

cd dart
git checkout release-6.0

3. Create a build directory:

mkdir build
cd build

4. Configure and build dart:

cmake ..
make -j4

所以我认为clone实际上实际下载源文件是对的吗?并且checkout只选择我想要实际使用和安装的代码版本?

但是如果我还要安装版本release-5.0怎么办?那么build目录中的编译库是否包含5.0和6.0版本的混合?

当我运行clone时,是否会下载5.0的所有文件, 6.0的所有文件?如果我只想安装6.0,那么效率是否非常低效?

谢谢!

1 个答案:

答案 0 :(得分:2)

  

所以我认为克隆实际上是在物理上下载源文件吗?

  

那个结帐只是选择我想要使用哪个版本的代码并安装?

使用,是的。它会更新您的文件系统,以反映您在签出时提交/分支时存储库所处的状态。

  

但是,如果我还要安装5.0版本,该怎么办?然后,构建目录中的已编译库是否包含版本5.0和6.0的混合?

不,如果您签出5.0,您的文件系统将更新以反映5.0分支的状态。同样适用于6.0和其他任何内容。

如果git忽略了构建/文件夹,那么很可能是,那就是。

  

当我运行clone时,是否会下载5.0的所有文件以及6.0的所有文件?

它的基本功能是下载目前的文件及其历史记录。因此,您将拥有每个文件中的一个,并且git知道存储库历史记录中每个文件发生了什么。当您签出不同的提交/分支时,git会将文件更新为它们在提交时所处的状态,并使用历史记录来执行此操作。

如果您要求的话,那么您没有相同文件的许多副本。

  

如果我只想安装6.0,这不是非常低效吗?

可能是。很可能6.0分支从5.0分支分支并依赖于其提交。