Go to file
Remy Böhmer 1469c28ec3 project: detach HEAD in internal worktree checkout.
When checkout is done with Git worktrees then the HEAD in the
bare-git repositories point to the initialized default (e.g.
'refs/heads/master'). This default branch does not exist
locally and is not automatically created.
When a user now creates a branch in any git repository named
'master' then it is no longer possible to get rid of this branch,
neither is it possible to switch to another branch and switch
back to this master branch. Git concludes the 'master' branch is
already checked out (in the bare Git) and that results in a
lockdown of this master branch.

To repoduce this issue, run these commands in a repo tree
checked out with --worktree:
- git checkout master # assuming the remote repo has a master branch,
                      # a local tracking branch master is created here
- git checkout -b temp
- git checkout master # This one now fails
- git branch -d master # fails too
The failure is caused by Git assuming the master branch is checked out
by the bare git repository since HEAD is pointing towards it.

To workaround this, we always detach HEAD in the bare-git when
syncing.  We don't need it to point to a ref in general, but we
would like it to be valid so git tools "just work" if they're run
in here.

Signed-off-by: Remy Bohmer <oss@bohmer.net>
Change-Id: I15c96604363c41f0d01c42f533174393097daeb5
Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/290985
Reviewed-by: Mike Frysinger <vapier@google.com>
2020-12-26 07:30:40 +00:00
.github/workflows switch to "main" branch for development 2020-11-16 05:07:33 +00:00
docs docs: Add Markdown inline code marker around inline XML example. 2020-12-13 03:25:36 +00:00
hooks Revert "commit-msg: Insert Change-Id at start of trailers" 2020-04-15 07:17:16 +00:00
release release-process: document schedule (including freezes) publicly 2020-07-23 08:07:38 +00:00
subcmds Add parallelism to 'branches' command 2020-12-14 23:35:12 +00:00
tests manifest_xml: harmonize list fields 2020-12-04 17:27:11 +00:00
.flake8 flake8: Suppress "E731 do not assign a lambda expression, use a def" 2020-02-15 03:41:17 +00:00
.gitattributes Adds additional crlf clobber avoidance. 2016-06-22 08:36:45 +00:00
.gitignore Add parallelism to 'branches' command 2020-12-14 23:35:12 +00:00
.mailmap Update .mailmap 2020-02-13 04:49:55 +00:00
.project Set correct name in PyDev and Eclipse project config 2013-04-19 09:35:43 +09:00
.pydevproject Leverage the next keyword from python 2.7 2018-12-19 11:06:35 -08:00
color.py Fix blank line issues reported by flake8 2020-02-12 06:36:40 +00:00
command.py command: add a repo help tip to --help output 2020-02-19 08:23:04 +00:00
editor.py Fix blank line issues reported by flake8 2020-02-12 06:36:40 +00:00
error.py Fix blank line issues reported by flake8 2020-02-12 06:36:40 +00:00
event_log.py Fix blank line issues reported by flake8 2020-02-12 06:36:40 +00:00
git_command.py Use hash for ControlPath instead of full variables 2020-04-15 06:51:22 +00:00
git_config.py Parse included files when reading git config files 2020-04-29 18:28:41 +00:00
git_refs.py project: fix m/ pseudo ref handling with git worktrees 2020-02-29 07:22:08 +00:00
git_ssh add license header to a few more files 2019-06-13 13:23:19 -04:00
gitc_utils.py gitc: write the manifest directly 2020-12-11 18:07:15 +00:00
hooks.py Concentrate the RepoHook knowledge in the RepoHook class 2020-11-23 09:59:16 +00:00
LICENSE setup.py: add basic packaging files 2019-12-02 04:23:31 +00:00
main.py manifest_xml: refactor manifest parsing from client management 2020-11-18 19:10:57 +00:00
manifest_xml.py manifest_xml: harmonize list fields 2020-12-04 17:27:11 +00:00
MANIFEST.in setup.py: add basic packaging files 2019-12-02 04:23:31 +00:00
pager.py pyflakes: Fix remaining "E501 line too long" warnings 2020-02-13 04:54:10 +00:00
platform_utils_win32.py flake8: Suppress "F821 undefined name" inline for Python 2 names 2020-02-15 04:45:16 +00:00
platform_utils.py Reland "Port _FileDescriptorStreamsNonBlocking to use poll()" 2020-03-13 17:45:36 +00:00
progress.py Fix blank line issues reported by flake8 2020-02-12 06:36:40 +00:00
project.py project: detach HEAD in internal worktree checkout. 2020-12-26 07:30:40 +00:00
pyversion.py Fix blank line issues reported by flake8 2020-02-12 06:36:40 +00:00
README.md README: use new bug template 2020-02-26 23:20:43 +00:00
repo replace javadoc docs with standard python style 2020-12-11 17:55:38 +00:00
repo_trace.py Fix blank line issues reported by flake8 2020-02-12 06:36:40 +00:00
run_tests run_tests: rewrite to use Python 3 2020-12-01 19:29:47 +00:00
setup.py setup: update Python version info 2020-12-01 19:29:43 +00:00
SUBMITTING_PATCHES.md switch to "main" branch for development 2020-11-16 05:07:33 +00:00
tox.ini stop testing Python 2.7 2020-09-06 17:53:47 +00:00
wrapper.py Fix blank line issues reported by flake8 2020-02-12 06:36:40 +00:00

repo

Repo is a tool built on top of Git. Repo helps manage many Git repositories, does the uploads to revision control systems, and automates parts of the development workflow. Repo is not meant to replace Git, only to make it easier to work with Git. The repo command is an executable Python script that you can put anywhere in your path.

Contact

Please use the repo-discuss mailing list or issue tracker for questions.

You can file a new bug report under the "repo" component.

Please do not e-mail individual developers for support. They do not have the bandwidth for it, and often times questions have already been asked on repo-discuss or bugs posted to the issue tracker. So please search those sites first.

Install

Many distros include repo, so you might be able to install from there.

# Debian/Ubuntu.
$ sudo apt-get install repo

# Gentoo.
$ sudo emerge dev-vcs/repo

You can install it manually as well as it's a single script.

$ mkdir -p ~/.bin
$ PATH="${HOME}/.bin:${PATH}"
$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/.bin/repo
$ chmod a+rx ~/.bin/repo