Git:仅处理相关数据

时间:2014-06-25 11:52:29

标签: git version-control

(注意 - 我的git版本是1.8.3。)

说我结帐一个示例项目的分支主人。

git clone --branch master "//server/GitProject.git" "C:/Project"

克隆了存储库。但是......究竟克隆了什么?对我而言,似乎所有东西都被克隆了。整个项目树,所有分支机构。 “ - branch master”只创建本地分支“master”,设置跟踪到origin / master并使HEAD指向master。

但是有50个不同的分支,每个分支有数百甚至数千个提交。我不知道(我也不在乎)大多数这些分支是什么,其中一些代表不同的和过时的旧版本,一些是由不同的团队,不同的团队成员创建的。当然,这也可能意味着我们公司的项目&分支管理失控了,但我们假设我们无法做任何事情。

现在,结帐后,git branch -a的输出会输出类似的结果。

*master
remotes/origin/Branch1
remotes/origin/Branch2
remotes/origin/Branch3
remotes/origin/Branch4
...etc

最近的主数据有371 MB ......但.git目录有2 GB。

现在让我们假设我是公司中唯一一个承诺掌握的人。我不需要整个项目树。我将尝试删除所有其他分支以仅保留相关数据。

如果我删除了所有远程分支,我不需要像这样......(unfortunately, I haven't found a command for it

git branch -rd origin/Branch1
git branch -rd origin/Branch2
git branch -rd origin/Branch3
git branch -rd origin/Branch4
...
git gc --prune=now

... .git文件夹的大小从2 GB减少到477 MB。这表明git checkout确实下载了整个提交树,而不仅仅是指向我想要的分支的部分。

现在一切正常。当我指定它时,拉和推命令仅适用于master。

第一个问题:使用git,“仅相关数据”工作流程是否合理?如果没有,为什么?

如果对第一个问题的答案是肯定的,那么我就有第二个问题。

有时,我需要使用可能位于提交树中任何位置的不同分支。但我还没弄清楚如何正确地做到这一点。

如果我致电git remote show origin,我会得到类似的内容

* remote origin
Fetch URL: //server/GitProject.git
Push  URL: C:\Project
HEAD branch: master
Remote branches:
  Branch1                 new (next fetch will store in remotes/origin)
  Branch2                 new (next fetch will store in remotes/origin)
  Branch3                 new (next fetch will store in remotes/origin)
  etc...

我看到git可以访问分支,其提交,引用和跟踪分支我本地没有。

但这句话“下一次获取将存储在遥控器/原点”让我感到困惑。我知道如果我git fetch我在本地创建了我的远程分支Branch1 - 但与其他所有内容一起,使用项目的整个提交树。 .git文件夹的大小将再次增加到2 GB。我不想那样做。我想要的那个分支可能只包含几个来自最近大师的提交。

第二个问题:如果我没有对远程分支的本地引用,并且只下载提交树的相关部分,那么如何仅下载特定分支?

我试过了......

git fetch origin Branch1

......这似乎完全符合我的要求。但是当我git branch -a时,这就是输出。没有Branch1。

* master remotes/origin/HEAD -> origin/master remotes/origin/master

我想这意味着Branch1的提交被下载并附加到树上(或者可能根本没有附加?)但由于没有与远程分支匹配的本地引用,因此无法访问它。所以我必须以某种方式创建本地引用。我认为。但我不确定如何。

0 个答案:

没有答案