git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v2 00/26] worktree lock, move, remove and unlock

From
Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Date
Feb 16, 2016, 13:29 UTC
Message-ID
<1455629367-26193-1-git-send-email-pclouds@gmail.com>
In-Reply-To
<1454492150-10628-1-git-send-email-pclouds@gmail.com>

I think this is good enough to be further polished and maybe released. The series adds four new commands and bash completion for git-worktree.

Remaining work to do on git-worktree:
 - "git worktree move --repository", in v1 but left out in v2 because
   it's trickier.
 - .git/config issue and submodule support

A bit off topic, I've been using this script to add "cw" command, to chdir to another worktree with tab-completion. It works wonderfully, but I'm not sure if it can ever be merged to git-completion.bash.

-- 8< --
cw() {
    cd "$(git worktree list --porcelain | grep -B2 refs/heads/$1 | head -n1 | cut -f 2 -d ' ')"
}
_git_cw() {
	local cur words cword prev
	_get_comp_words_by_ref -n =: cur words cword prev
    	local list="$(git worktree list --porcelain | grep '^branch refs/heads/' | cut -c 19-)"
	__gitcomp "$list"
}
complete -o bashdefault -o default -o nospace -F _git_cw cw 2>/dev/null || \
    complete -o default -o nospace -F _git_cw cw
-- 8< --
Nguyễn Thái Ngọc Duy (26):
  usage.c: move format processing out of die_errno()
  usage.c: add sys_error() that prints strerror() automatically
  copy.c: import copy_file() from busybox
  copy.c: delete unused code in copy_file()
  copy.c: convert bb_(p)error_msg to (sys_)error
  copy.c: style fix
  copy.c: convert copy_file() to copy_dir_recursively()
  completion: support git-worktree
  git-worktree.txt: keep subcommand listing in alphabetical order
  wrapper.c: allow to create an empty file with write_file()
  path.c: add git_common_path() and strbuf_git_common_path()
  worktree.c: use is_dot_or_dotdot()
  worktree.c: store "id" instead of "git_dir"
  worktree.c: add clear_worktree()
  worktree.c: add find_worktree_by_path()
  worktree.c: add is_main_worktree()
  worktree.c: add validate_worktree()
  worktree.c: add update_worktree_location()
  worktree.c: add is_worktree_locked()
  worktree: avoid 0{40}, too many zeroes, hard to read
  worktree: simplify prefixing paths
  worktree: add "lock" command
  worktree: add "unlock" command
  worktree: add "move" commmand
  worktree move: accept destination as directory
  worktree: add "remove" command
 Documentation/git-worktree.txt         |  55 +++--
 builtin/worktree.c                     | 240 ++++++++++++++++++++-
 cache.h                                |   4 +
 contrib/completion/git-completion.bash |  29 +++
 copy.c                                 | 369 +++++++++++++++++++++++++++++++++
 git-compat-util.h                      |   1 +
 path.c                                 |  29 +++
 t/t2028-worktree-move.sh (new +x)      | 103 +++++++++
 usage.c                                |  35 +++-
 worktree.c                             | 171 +++++++++++++--
 worktree.h                             |  40 +++-
 wrapper.c                              |   2 +-
 12 files changed, 1029 insertions(+), 49 deletions(-)
 create mode 100755 t/t2028-worktree-move.sh
-- 
2.7.0.377.g4cd97dd
Previous: Nguyễn Thái Ngọc DuyNext: Nguyễn Thái Ngọc Duy
Message 22 of 50 in “"git worktree move" preview”
  1. 00/20 "git worktree move" previewNguyễn Thái Ngọc Duy, Feb 3, 2016
  2. 01/20 usage.c: move format processing out of die_errno()Nguyễn Thái Ngọc Duy, Feb 3, 2016
  3. 02/20 usage.c: add sys_error() that prints strerror() automaticallyNguyễn Thái Ngọc Duy, Feb 3, 2016
  4. 03/20 path.c: add git_common_path() and strbuf_git_common_path()Nguyễn Thái Ngọc Duy, Feb 3, 2016
  5. 04/20 path.c: add is_git_path_shared()Nguyễn Thái Ngọc Duy, Feb 3, 2016
  6. 05/20 copy.c: add copy_dir_recursively()Nguyễn Thái Ngọc Duy, Feb 3, 2016
  7. 06/20 worktree.c: use is_dot_or_dotdot()Nguyễn Thái Ngọc Duy, Feb 3, 2016
  8. 07/20 worktree.c: store "id" instead of "git_dir"Nguyễn Thái Ngọc Duy, Feb 3, 2016
  9. 08/20 worktree.c: add clear_worktree()Nguyễn Thái Ngọc Duy, Feb 3, 2016
  10. 09/20 worktree.c: add find_worktree_by_path()Nguyễn Thái Ngọc Duy, Feb 3, 2016
  11. 10/20 worktree.c: add is_main_worktree()Nguyễn Thái Ngọc Duy, Feb 3, 2016
  12. 11/20 worktree.c: recognize no main worktreeNguyễn Thái Ngọc Duy, Feb 3, 2016
  13. 12/20 worktree.c: add update_worktree_location()Nguyễn Thái Ngọc Duy, Feb 3, 2016
  14. 13/20 worktree.c: add update_worktree_gitfile()Nguyễn Thái Ngọc Duy, Feb 3, 2016
  15. 14/20 worktree.c: add collect_per_worktree_git_paths()Nguyễn Thái Ngọc Duy, Feb 3, 2016
  16. 15/20 worktree: avoid 0{40}, too many zeroes, hard to readNguyễn Thái Ngọc Duy, Feb 3, 2016
  17. 16/20 worktree: simplify prefixing pathsNguyễn Thái Ngọc Duy, Feb 3, 2016
  18. 17/20 worktree: add "move" commmandNguyễn Thái Ngọc Duy, Feb 3, 2016
  19. 18/20 worktree: refactor add_worktree()Nguyễn Thái Ngọc Duy, Feb 3, 2016
  20. 19/20 worktree: move repo, simple caseNguyễn Thái Ngọc Duy, Feb 3, 2016
  21. 20/20 worktree: move repo, convert main worktreeNguyễn Thái Ngọc Duy, Feb 3, 2016
  22. 00/26 worktree lock, move, remove and unlockNguyễn Thái Ngọc Duy, Feb 16, 2016
  23. 01/26 usage.c: move format processing out of die_errno()Nguyễn Thái Ngọc Duy, Feb 16, 2016
  24. 02/26 usage.c: add sys_error() that prints strerror() automaticallyNguyễn Thái Ngọc Duy, Feb 16, 2016
  25. 03/26 copy.c: import copy_file() from busyboxNguyễn Thái Ngọc Duy, Feb 16, 2016
  26. 04/26 copy.c: delete unused code in copy_file()Nguyễn Thái Ngọc Duy, Feb 16, 2016
  27. 05/26 copy.c: convert bb_(p)error_msg to (sys_)errorNguyễn Thái Ngọc Duy, Feb 16, 2016
  28. 06/26 copy.c: style fixNguyễn Thái Ngọc Duy, Feb 16, 2016
  29. 07/26 copy.c: convert copy_file() to copy_dir_recursively()Nguyễn Thái Ngọc Duy, Feb 16, 2016
  30. 08/26 completion: support git-worktreeNguyễn Thái Ngọc Duy, Feb 16, 2016
  31. 09/26 git-worktree.txt: keep subcommand listing in alphabetical orderNguyễn Thái Ngọc Duy, Feb 16, 2016
  32. 10/26 wrapper.c: allow to create an empty file with write_file()Nguyễn Thái Ngọc Duy, Feb 16, 2016
  33. Junio C HamanoFeb 17, 2016
  34. Duy NguyenFeb 18, 2016
  35. 11/26 path.c: add git_common_path() and strbuf_git_common_path()Nguyễn Thái Ngọc Duy, Feb 16, 2016
  36. 12/26 worktree.c: use is_dot_or_dotdot()Nguyễn Thái Ngọc Duy, Feb 16, 2016
  37. 13/26 worktree.c: store "id" instead of "git_dir"Nguyễn Thái Ngọc Duy, Feb 16, 2016
  38. 14/26 worktree.c: add clear_worktree()Nguyễn Thái Ngọc Duy, Feb 16, 2016
  39. 15/26 worktree.c: add find_worktree_by_path()Nguyễn Thái Ngọc Duy, Feb 16, 2016
  40. 16/26 worktree.c: add is_main_worktree()Nguyễn Thái Ngọc Duy, Feb 16, 2016
  41. 17/26 worktree.c: add validate_worktree()Nguyễn Thái Ngọc Duy, Feb 16, 2016
  42. 18/26 worktree.c: add update_worktree_location()Nguyễn Thái Ngọc Duy, Feb 16, 2016
  43. 19/26 worktree.c: add is_worktree_locked()Nguyễn Thái Ngọc Duy, Feb 16, 2016
  44. 20/26 worktree: avoid 0{40}, too many zeroes, hard to readNguyễn Thái Ngọc Duy, Feb 16, 2016
  45. 21/26 worktree: simplify prefixing pathsNguyễn Thái Ngọc Duy, Feb 16, 2016
  46. 22/26 worktree: add "lock" commandNguyễn Thái Ngọc Duy, Feb 16, 2016
  47. 23/26 worktree: add "unlock" commandNguyễn Thái Ngọc Duy, Feb 16, 2016
  48. 24/26 worktree: add "move" commmandNguyễn Thái Ngọc Duy, Feb 16, 2016
  49. 25/26 worktree move: accept destination as directoryNguyễn Thái Ngọc Duy, Feb 16, 2016
  50. 26/26 worktree: add "remove" commandNguyễn Thái Ngọc Duy, Feb 16, 2016

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.