Copyright (C) 2009 The Android Open Source Project Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. Subject: How to get the android source code using Cygwin and Git Date: 2009/04/27 Updated: 2009/05/21 Updated: 2010/03/30 Table of content: 1- Goals and Requirements 2- Getting the code, the simple way 3- SSH issues 4- Advanced Tricks ------------------------- 1- Goals and Requirements ------------------------- This document explains how to checkout the Android source from the git repositories under Windows. As stated in development/docs/howto_build_SDK.txt, one can't build the whole Android source code under Windows. You can only build the SDK tools for Windows. There are a number of caveats in checking out the code from Git under Windows. This document tries to explain them. First you will need to meet the following requirements: - You must have Cygwin installed. But wait! You CANNOT use the latest Cygwin 1.7. Instead you MUST use the "legacy Cygwin 1.5" that you can find at this page: http://cygwin.org/win-9x.html Don't mind the page title, just grab setup-legacy.exe and it will works just fine under XP or Vista. - You must install Cyginw using the "Unix / Binary" mode. If you don't do that, git will fail to properly compute some SHA1 keys. - You need the "git" and "curl" packages to checkout the code. If you plan to contribute, you might want to get "gitk" also. Note: if you want to build the SDK, check the howto_build_SDK.txt file for a list of extra required packages. The short summary is that you need at least these: autoconf, bison, curl, flex, gcc, g++, git, gnupg, make, mingw-zlib, python, unzip, zip and you must avoid the "readline" package. ----------------------------------- 2- Getting the code, the simple way ----------------------------------- Out of the box, "repo" and "git" will work just fine under Cygwin: $ repo init -u git://android.git.kernel.org/platform/manifest.git $ repo sync And you're done. You can build as explained in howto_build_SDK.txt and ignore the rest of this document. ------------- 3- SSH issues ------------- If you maintain your own private repository using an SSH server, you might get some "mux/ssh" errors. In this case try this: $ repo init -u ssh://my.private.ssh.repo/platform/manifest.git $ export GIT_SSH=ssh $ repo sync ------------------ 4- Advanced Tricks ------------------ There is one remaining issue with the default repo/git options: If you plan on contributing, you will notice that even after a fresh "repo sync" some projects are marked as having modified files. This happens on the "bionic" and the "external/iptables" project. The issue is that they have files which have the same name yet differ only by their case-sensitivity. Since the Windows filesystem is not case-sensitive, this confuses Git. Solution: we can simply ignore these projects as they are not needed to build the Windows SDK. To do this you just need to create a file .repo/local_manifest.xml that provides a list of projects to ignore: <?xml version="1.0" encoding="UTF-8"?> <manifest> <remove-project name="platform/external/iptables" /> </manifest> The other thing we can do is tell git not to track the files that cause problems: cd bionic git update-index --assume-unchanged \ libc/kernel/common/linux/netfilter/xt_CONNMARK.h \ libc/kernel/common/linux/netfilter/xt_MARK.h \ libc/kernel/common/linux/netfilter_ipv6/ip6t_HL.h cd external/tcpdump; git update-index --assume-unchanged \ tests/print-X.new \ tests/print-XX.new Here's a script that takes care of all these details. It performs the repo init, creates the appropriate local_manifest.xml, does a repo sync as needed and tell git to ignore the offending files: ------------ #!/bin/bash set -e # fail on errors URL=ssh://android-git.corp.google.com:29418/platform/manifest.git BRANCH=donut if [ "$1" == "-b" ]; then shift; BRANCH=$1; shift; fi # repo init if there's no .repo directory if [[ ! -d .repo ]]; then repo init -u $URL -b $BRANCH fi # create a local_manifest to exclude projects that cause problems under Windows # due to the case-insenstivines of the file system. L=.repo/local_manifest.xml if [[ ! -f $L ]]; then cat > $L <<EOF <?xml version="1.0" encoding="UTF-8"?> <manifest> <remove-project name="platform/external/iptables" /> </manifest> EOF fi # sync using the native ssh client if necessary [[ $URL != ${URL/ssh/} ]] && export GIT_SSH=ssh repo sync $@ # These files cause trouble too, we need to ignore them (cd bionic; git update-index --assume-unchanged \ libc/kernel/common/linux/netfilter/xt_CONNMARK.h \ libc/kernel/common/linux/netfilter/xt_MARK.h \ libc/kernel/common/linux/netfilter_ipv6/ip6t_HL.h ) (cd external/tcpdump; git update-index --assume-unchanged \ tests/print-X.new \ tests/print-XX.new ) ------------ Simply extract this to a "my_sync.sh" file and try the following: $ mkdir android_src $ cd android_src $ chmod +x mysync.sh $ ./mysync.sh -end-