如何减少每次在 Xen 源上执行 make world 时 git pull 的时间

如何减少每次在 Xen 源上执行 make world 时 git pull 的时间

我从源代码编译 xen,每次我这样做时make world 它基本上都会给出一些或其他错误,我的问题不是那些错误(我正在尝试调试它们)但问题是每次我做一个make world

Xen 基本上从 git 存储库中提取内容

+ rm -rf linux-2.6-pvops.git linux-2.6-pvops.git.tmp
+ mkdir linux-2.6-pvops.git.tmp
+ rmdir linux-2.6-pvops.git.tmp
+ git clone -o xen -n git://git.kernel.org/pub/scm/linux/kernel/git/jeremy/xen.git linux-2.6-pvops.git.tmp
Initialized empty Git repository in /usr/src/xen-4.0.1/linux-2.6-pvops.git.tmp/.git/
remote: Counting objects: 1941611, done.
remote: Compressing objects: 100% (319127/319127), done.

remote: Total 1941611 (delta 1614302), reused 1930655 (delta 1604595) **Receiving objects: 20% (1941611/1941611), 98.17 MiB | 87 KiB/s, done.**

如果您注意到最后一行,它仍然在消耗我的带宽从互联网上提取内容。我怎样才能每次都停止这一步并使用现有的 git 存储库?

答案1

详细说明 Tobu 的回应(他的沮丧显而易见……这是一种非常愚蠢的 Makefile 制作方法);有一个 Makefile 包含以下内容:

rm -rf linux-2.6-pvops.git linux-2.6-pvops.git.tmp
mkdir linux-2.6-pvops.git.tmp
rmdir linux-2.6-pvops.git.tmp
git clone -o xen -n git://git.kernel.org/pub/scm/linux/kernel/git/jeremy/xen.git linux-2.6-pvops.git.tmp

它真正应该做的是(用伪代码):

if git repository exists:
    update using `git pull`
else:
    clone a fresh copy using `git clone`

基本上,总是克隆整个存储库的全新副本是非常低效的。如果您不熟悉该过程,我建议您提交包含详细信息的错误报告。

答案2

嗨,谢谢大家,我找到了解决问题的方法。

在目录 xen-4.0.1/buildconfigs 中打开文件 src.git-clone,以下几行负责此拉取

   if ! [ -d $(LINUX_SRCDIR) ]; then \
           rm -rf $(LINUX_SRCDIR) $(LINUX_SRCDIR).tmp; \
           mkdir $(LINUX_SRCDIR).tmp; rmdir $(LINUX_SRCDIR).tmp; \
           $(GIT) clone -o $(XEN_GIT_ORIGIN) -n $(XEN_LINUX_GIT_URL) $(LINUX_SRCDIR).tmp; \
               (cd $(LINUX_SRCDIR).tmp; git checkout -b $(XEN_LINUX_GIT_LOCALBRANCH) $(XEN_LINUX_GITREV) ); \
           mv $(LINUX_SRCDIR).tmp $(LINUX_SRCDIR); \

   fi

因此在以下几行开头添加一个井号 #

#       if ! [ -d $(LINUX_SRCDIR) ]; then \
#               rm -rf $(LINUX_SRCDIR) $(LINUX_SRCDIR).tmp; \
#               mkdir $(LINUX_SRCDIR).tmp; rmdir $(LINUX_SRCDIR).tmp; \
#               $(GIT) clone -o $(XEN_GIT_ORIGIN) -n $(XEN_LINUX_GIT_URL) $(LINUX_SRCDIR).tmp; \
#               (cd $(LINUX_SRCDIR).tmp; git checkout -b $(XEN_LINUX_GIT_LOCALBRANCH) $(XEN_LINUX_GITREV) ); \
#               mv $(LINUX_SRCDIR).tmp $(LINUX_SRCDIR); \
#
#       fi

这将解决每次发生 git pull 的问题。假设您已经拉取了所需的树,并且执行了make dist因为将拉取的位置,因为如果您里面有树,make world您可以继续。make dist

相关内容