我从源代码编译 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