1Copyright (C) 2009 The Android Open Source Project
2
3Licensed under the Apache License, Version 2.0 (the "License");
4you may not use this file except in compliance with the License.
5You may obtain a copy of the License at
6
7     http://www.apache.org/licenses/LICENSE-2.0
8
9Unless required by applicable law or agreed to in writing, software
10distributed under the License is distributed on an "AS IS" BASIS,
11WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12See the License for the specific language governing permissions and
13limitations under the License.
14
15
16Subject: How to get the android source code using Cygwin and Git
17Date:    2009/04/27
18Updated: 2009/05/21
19Updated: 2010/03/30
20
21
22Table of content:
23  1- Goals and Requirements
24  2- Getting the code, the simple way
25  3- SSH issues
26  4- Advanced Tricks
27
28
29-------------------------
301- Goals and Requirements
31-------------------------
32
33This document explains how to checkout the Android source from the git
34repositories under Windows.
35
36As stated in development/docs/howto_build_SDK.txt, one can't build the whole
37Android source code under Windows. You can only build the SDK tools for
38Windows.
39
40There are a number of caveats in checking out the code from Git under Windows.
41This document tries to explain them.
42
43First you will need to meet the following requirements:
44- You must have Cygwin installed. But wait! You CANNOT use the latest Cygwin 1.7.
45  Instead you MUST use the "legacy Cygwin 1.5" that you can find at this page:
46
47    http://cygwin.org/win-9x.html
48
49  Don't mind the page title, just grab setup-legacy.exe and it will works just fine
50  under XP or Vista.
51
52- You must install Cyginw using the "Unix / Binary" mode.
53  If you don't do that, git will fail to properly compute some SHA1 keys.
54
55- You need the "git" and "curl" packages to checkout the code.
56  If you plan to contribute, you might want to get "gitk" also.
57
58  Note: if you want to build the SDK, check the howto_build_SDK.txt file
59  for a list of extra required packages.
60  The short summary is that you need at least these:
61    autoconf, bison, curl, flex, gcc, g++, git, gnupg, make, mingw-zlib, python, unzip, zip
62  and you must avoid the "readline" package.
63
64
65-----------------------------------
662- Getting the code, the simple way
67-----------------------------------
68
69Out of the box, "repo" and "git" will work just fine under Cygwin:
70
71  $ repo init -u git://android.git.kernel.org/platform/manifest.git
72  $ repo sync
73
74And you're done. You can build as explained in howto_build_SDK.txt and ignore
75the rest of this document.
76
77
78-------------
793- SSH issues
80-------------
81
82If you maintain your own private repository using an SSH server, you might get
83some "mux/ssh" errors. In this case try this:
84
85  $ repo init -u ssh://my.private.ssh.repo/platform/manifest.git
86  $ export GIT_SSH=ssh
87  $ repo sync
88
89
90------------------
914- Advanced Tricks
92------------------
93
94There is one remaining issue with the default repo/git options:
95
96If you plan on contributing, you will notice that even after a fresh "repo
97sync" some projects are marked as having modified files. This happens on the
98"bionic" and the "external/iptables" project. The issue is that they have files
99which have the same name yet differ only by their case-sensitivity. Since the
100Windows filesystem is not case-sensitive, this confuses Git.
101
102Solution: we can simply ignore these projects as they are not needed to build
103the Windows SDK.
104
105To do this you just need to create a file .repo/local_manifest.xml that
106provides a list of projects to ignore:
107
108<?xml version="1.0" encoding="UTF-8"?>
109<manifest>
110  <remove-project name="platform/external/iptables" />
111</manifest>
112
113The other thing we can do is tell git not to track the files that cause
114problems:
115
116  cd bionic
117  git update-index --assume-unchanged \
118    libc/kernel/common/linux/netfilter/xt_CONNMARK.h \
119    libc/kernel/common/linux/netfilter/xt_MARK.h \
120    libc/kernel/common/linux/netfilter_ipv6/ip6t_HL.h
121
122  cd external/tcpdump;
123  git update-index --assume-unchanged \
124    tests/print-X.new \
125    tests/print-XX.new
126
127
128Here's a script that takes care of all these details. It performs the repo
129init, creates the appropriate local_manifest.xml, does a repo sync as
130needed and tell git to ignore the offending files:
131
132------------
133#!/bin/bash
134
135set -e  # fail on errors
136
137URL=ssh://android-git.corp.google.com:29418/platform/manifest.git
138BRANCH=donut
139if [ "$1" == "-b" ]; then shift; BRANCH=$1; shift; fi
140
141# repo init if there's no .repo directory
142if [[ ! -d .repo ]]; then
143    repo init -u $URL -b $BRANCH
144fi
145
146# create a local_manifest to exclude projects that cause problems under Windows
147# due to the case-insenstivines of the file system.
148L=.repo/local_manifest.xml
149if [[ ! -f $L ]]; then
150
151    cat > $L <<EOF
152<?xml version="1.0" encoding="UTF-8"?>
153<manifest>
154<remove-project name="platform/external/iptables" />
155</manifest>
156EOF
157fi
158
159# sync using the native ssh client if necessary
160[[ $URL != ${URL/ssh/} ]] && export GIT_SSH=ssh
161repo sync $@
162
163
164# These files cause trouble too, we need to ignore them
165(cd bionic;
166git update-index --assume-unchanged \
167    libc/kernel/common/linux/netfilter/xt_CONNMARK.h \
168    libc/kernel/common/linux/netfilter/xt_MARK.h \
169    libc/kernel/common/linux/netfilter_ipv6/ip6t_HL.h
170)
171(cd external/tcpdump;
172git update-index --assume-unchanged \
173    tests/print-X.new \
174    tests/print-XX.new
175)
176------------
177
178Simply extract this to a "my_sync.sh" file and try the following:
179  $ mkdir android_src
180  $ cd android_src
181  $ chmod +x mysync.sh
182  $ ./mysync.sh
183
184
185-end-
186
187
188
189
190