Sau đây là hướng dẫn tạo một local mirror cho Android AOSP để lưu trữ và phát triển trên server nội bộ.
Mã nguồn script tạo mirror và đồng bộ mã nguồn từ một git repository. Script này là một utility để hỗ trợ cho script chính sau này.
[SERVER] /usr/local/bin/git-mirror.sh
#!/bin/bash # git-mirror.sh <url> [TARGET] # @author: Nguyen Hong Hai # git_url=$1 out_dir=$2 if [ -z ${git_url} ]; then echo "Usage: $(basename $0) <url> [TARGET]" >&2 exit 1 fi project_name=$(basename ${git_url} .git) project_dir=${project_name}.git if [ -n "${out_dir}" ]; then # create the sub directories if it does not exist. mkdir -p ${out_dir} cd ${out_dir} || exit 2 fi # clone if the repo does not exist, otherwise just fetch it if [ -d ${project_dir} ]; then echo "Fetching: ${git_url}" cd ${project_dir} git fetch && cd .. else echo "Cloning: ${url}" git clone --mirror ${git_url} ${project_dir} fi
Phân quyền executable cho script.
$ sudo chmod a+x /usr/local/bin/git-mirror.sh
Mã nguồn script tạo local mirror cho Android AOSP. Script này sẽ tải toàn bộ những repository xuất hiện trên Gitiles của Google (kể cả những repository không cần thiết cho việc phát triển).
[SERVER] /usr/local/bin/git-mirror-aosp.sh
#!/bin/bash # git-mirror-aosp.sh - mirror all Android source code # @author: Nguyen Hong Hai # aosp_base=https://android.googlesource.com aosp_list=${aosp_base}/?format=TEXT out_dir=/aosp cur_list=${out_dir}/projects.list new_list=${cur_list}.new # create the target directory if it does not exist. mkdir -p ${out_dir} # download the project list, if failed then use the previous one echo -n "Downloading the project list....." wget -O ${new_list} ${aosp_list} &> /dev/null if [ $? -ne 0 ]; then echo "[NG]" # reuse the old project list rm -f ${new_list} else echo "[OK]" # update the project list mv -f ${new_list} ${cur_list} fi [ -f ${cur_list} ] && for project in $(cat ${cur_list}); do git-mirror.sh ${aosp_base}/${project} \ ${out_dir}/$(dirname ${project}) done
Phân quyền executable cho script.
$ sudo chmod a+x /usr/local/bin/git-mirror-aosp.sh
Thêm task vào crontab để tự động download và đồng bộ mỗi 30 phút.
$ sudo crontab -e */30 * * * * /usr/local/bin/git-mirror-aosp.sh
Để checkout mã nguồn từ server nội bộ:
$ mkdir ~/bin $ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo $ chmod a+x ~/bin/repo $ AOSP_SERVER=ssh://icreativ@192.168.1.2 $ mkdir aosp/; cd aosp/ $ repo init -u ${AOSP_SERVER}/aosp/platform/manifest.git \ --repo-url=${AOSP_SERVER}/aosp/tools/repo.git \ -b <branch> $ repo sync -j1
Update: Tải và đồng bộ dùng repo script
Bản thân script repo
của Google cũng hỗ trợ tạo local mirror cho mã nguồn Android, tuy nhiên nó chỉ tải những thành phần thiết yếu chứ không phải toàn bộ mã nguồn như khi sử dụng script trên.
Ta viết lại mã nguồn cho script git-mirror-aosp.sh
như sau:
[SERVER] /usr/local/bin/git-mirror-aosp.sh
#!/bin/bash # git-mirror-aosp.sh - mirror all Android source code # @author: Nguyen Hong Hai # aosp_base=https://android.googlesource.com aosp_mirror=${aosp_base}/mirror/manifest.git out_dir=/aosp # create the target directory if it does not exist. mkdir -p ${out_dir} cd ${out_dir} # initialize the AOSP repo if it was not. [ -d .repo ] || repo init -u ${aosp_mirror} --mirror # update the repositories repo sync