2019-12-04 23:34:07 +00:00
|
|
|
# Microsoft Windows Details
|
|
|
|
|
2024-01-04 17:41:32 +00:00
|
|
|
> **Warning: The "master" branch is no longer used. Use "main" instead.**<br>
|
|
|
|
> https://gerrit.googlesource.com/git-repo/+/HEAD/docs/windows.md
|
|
|
|
|
2019-12-04 23:34:07 +00:00
|
|
|
Repo is primarily developed on Linux with a lot of users on macOS.
|
|
|
|
Windows is, unfortunately, not a common platform.
|
|
|
|
There is support in repo for Windows, but there might be some rough edges.
|
|
|
|
|
|
|
|
Keep in mind that Windows in general is "best effort" and "community supported".
|
|
|
|
That means we don't actively test or verify behavior, but rely heavily on users
|
|
|
|
to report problems back to us, and to contribute fixes as needed.
|
|
|
|
|
|
|
|
[TOC]
|
|
|
|
|
|
|
|
## Windows
|
|
|
|
|
|
|
|
We only support Windows 10 or newer.
|
|
|
|
This is largely due to symlinks not being available in older versions, but it's
|
|
|
|
also due to most developers not using Windows.
|
|
|
|
|
|
|
|
We will never add code specific to older versions of Windows.
|
|
|
|
It might work, but it most likely won't, so please don't bother asking.
|
|
|
|
|
2020-02-21 06:19:46 +00:00
|
|
|
## Git worktrees
|
|
|
|
|
|
|
|
*** note
|
|
|
|
**Warning**: Repo's support for Git worktrees is new & experimental.
|
|
|
|
Please report any bugs and be sure to maintain backups!
|
|
|
|
***
|
|
|
|
|
|
|
|
The Repo 2.4 release introduced support for [Git worktrees][git-worktree].
|
|
|
|
You don't have to worry about or understand this particular feature, so don't
|
|
|
|
worry if this section of the Git manual is particularly impenetrable.
|
|
|
|
|
|
|
|
The salient point is that Git worktrees allow Repo to create repo client
|
|
|
|
checkouts that do not require symlinks at all under Windows.
|
|
|
|
This means users no longer need Administrator access to sync code.
|
|
|
|
|
|
|
|
Simply use `--worktree` when running `repo init` to opt in.
|
|
|
|
|
|
|
|
This does not effect specific Git repositories that use symlinks themselves.
|
|
|
|
|
|
|
|
[git-worktree]: https://git-scm.com/docs/git-worktree
|
|
|
|
|
|
|
|
## Symlinks by default
|
|
|
|
|
|
|
|
*** note
|
|
|
|
**NB**: This section applies to the default Repo behavior which does not use
|
|
|
|
Git worktrees (see the previous section for more info).
|
|
|
|
***
|
2019-12-04 23:34:07 +00:00
|
|
|
|
|
|
|
Repo will use symlinks heavily internally.
|
|
|
|
On *NIX platforms, this isn't an issue, but Windows makes it a bit difficult.
|
|
|
|
|
|
|
|
There are some documents out there for how to do this, but usually the easiest
|
|
|
|
answer is to run your shell as an Administrator and invoke repo/git in that.
|
|
|
|
|
|
|
|
This isn't a great solution, but Windows doesn't make this easy, so here we are.
|
|
|
|
|
|
|
|
### Launch Git Bash
|
|
|
|
|
|
|
|
If you install Git Bash (see below), you can launch that with appropriate
|
|
|
|
permissions so that all programs "just work".
|
|
|
|
|
|
|
|
* Open the Start Menu (i.e. press the ⊞ key).
|
|
|
|
* Find/search for "Git Bash".
|
|
|
|
* Right click it and select "Run as administrator".
|
|
|
|
|
|
|
|
*** note
|
|
|
|
**NB**: This environment is only needed when running `repo`, or any specific `git`
|
|
|
|
command that might involve symlinks (e.g. `pull` or `checkout`).
|
|
|
|
You do not need to run all your commands in here such as your editor.
|
|
|
|
***
|
|
|
|
|
|
|
|
### Symlinks with GNU tools
|
|
|
|
|
|
|
|
If you want to use `ln -s` inside of the default Git/bash shell, you might need
|
|
|
|
to export this environment variable:
|
|
|
|
```sh
|
|
|
|
$ export MSYS="winsymlinks:nativestrict"
|
|
|
|
```
|
|
|
|
|
|
|
|
Otherwise `ln -s` will copy files and not actually create a symlink.
|
|
|
|
This also helps `tar` unpack symlinks, so that's nice.
|
|
|
|
|
|
|
|
### References
|
|
|
|
|
|
|
|
* https://github.com/git-for-windows/git/wiki/Symbolic-Links
|
|
|
|
* https://blogs.windows.com/windowsdeveloper/2016/12/02/symlinks-windows-10/
|
|
|
|
|
|
|
|
## Python
|
|
|
|
|
2020-02-21 06:19:46 +00:00
|
|
|
Python 3.6 or newer is required.
|
|
|
|
Python 2 is known to be broken when running under Windows.
|
2019-12-04 23:34:07 +00:00
|
|
|
See our [Python Support](./python-support.md) document for more details.
|
|
|
|
|
|
|
|
You can grab the latest Windows installer here:<br>
|
|
|
|
https://www.python.org/downloads/release/python-3
|
|
|
|
|
|
|
|
## Git
|
|
|
|
|
|
|
|
You should install the most recent version of Git for Windows:<br>
|
|
|
|
https://git-scm.com/download/win
|
|
|
|
|
|
|
|
When installing, make sure to turn on "Enable symbolic links" when prompted.
|
|
|
|
|
|
|
|
If you've already installed Git for Windows, you can simply download the latest
|
|
|
|
installer from above and run it again.
|
|
|
|
It should safely upgrade things in situ for you.
|
|
|
|
This is useful if you want to switch the symbolic link option after the fact.
|
|
|
|
|
|
|
|
## Shell
|
|
|
|
|
|
|
|
We don't have a specific requirement for shell environments when running repo.
|
|
|
|
Most developers use MinTTY/bash that's included with the Git for Windows install
|
|
|
|
(so see above for installing Git).
|
|
|
|
|
|
|
|
Command & Powershell & the Windows Terminal probably work.
|
|
|
|
Who knows!
|
|
|
|
|
|
|
|
## FAQ
|
|
|
|
|
|
|
|
### repo upload always complains about allowing hooks or using --no-verify!
|
|
|
|
|
|
|
|
When using `repo upload` in projects that have custom repohooks, you might get
|
|
|
|
an error like the following:
|
|
|
|
```sh
|
|
|
|
$ repo upload
|
|
|
|
ERROR: You must allow the pre-upload hook or use --no-verify.
|
|
|
|
```
|
|
|
|
|
|
|
|
This can be confusing as you never get prompted.
|
|
|
|
[MinTTY has a bug][mintty] that breaks isatty checking inside of repo which
|
|
|
|
causes repo to never interactively prompt the user which means the upload check
|
|
|
|
always fails.
|
|
|
|
|
|
|
|
You can workaround this by manually granting consent when uploading.
|
|
|
|
Simply add the `--verify` option whenever uploading:
|
|
|
|
```sh
|
|
|
|
$ repo upload --verify
|
|
|
|
```
|
|
|
|
|
|
|
|
You will have to specify this flag every time you upload.
|
|
|
|
|
|
|
|
[mintty]: https://github.com/mintty/mintty/issues/56
|
|
|
|
|
|
|
|
### repohooks always fail with an close_fds error.
|
|
|
|
|
|
|
|
When using the [reference repohooks project][repohooks] included in AOSP,
|
|
|
|
you might see errors like this when running `repo upload`:
|
|
|
|
```sh
|
|
|
|
$ repo upload
|
|
|
|
ERROR: Traceback (most recent call last):
|
|
|
|
...
|
|
|
|
File "C:\...\lib\subprocess.py", line 351, in __init__
|
|
|
|
raise ValueError("close_fds is not supported on Windows "
|
|
|
|
ValueError: close_fds is not supported on Windows platforms if you redirect stdin/stderr/stdout
|
|
|
|
|
|
|
|
Failed to run main() for pre-upload hook; see traceback above.
|
|
|
|
```
|
|
|
|
|
|
|
|
This error shows up when using Python 2.
|
|
|
|
You should upgrade to Python 3 instead (see above).
|
|
|
|
|
|
|
|
If you already have Python 3 installed, make sure it's the default version.
|
|
|
|
Running `python --version` should say `Python 3`, not `Python 2`.
|
|
|
|
If you didn't install the Python versions, or don't have permission to change
|
|
|
|
the default version, you can probably workaround this by changing `$PATH` in
|
|
|
|
your shell so the Python 3 version is found first.
|
|
|
|
|
|
|
|
[repohooks]: https://android.googlesource.com/platform/tools/repohooks
|