> How cat one track multiple branches with git without keeping entirely > separate trees? There are multiple possibilities here and it is not clear which you are hoping for. A) You could be trying to avoid having two separate .git copies around, each also with checked-out material. (2 separate deep clones.) B) You could be trying to avoid having 1 .git with two directories trees for checkouts. (One deep clone with an added worktree, for example.) C) You could be trying to have one .git copy and only one directory tree with only one checkout at a time. (In some contexts, this sort of thing might involve considerable time and I/O for switching the content of the directory tree to be the checkout of a different branch. main vs. stable/13 now vs. 3 years from now might be different.) (One deep clone and no additional worktrees.) D) Sort of like (A) but using 2 Shallow Clones, one per branch. (This uses somewhat more space than (C), but not a lot more.) (2 separate shallow clones in separate directories, one for each branch.) My guess from your wording is that you are after (C). I presume no local modifications/patches and do not cover how to handle having such. The command sequences shown would destroy local changes. It is not clear if such matches what you are after or not. I presume below /usr/src/ use for where the clone was put. It also presumes the fetch status is recent enough to contain the commit that you want to use. For building main : # cd /usr/src # git switch --discard-changes main # git fetch freebsd # if advancing # git merge --ff-only freebsd/main # if advancing # . . . vs. for building stable/13 : # cd /usr/src # git switch --discard-changes stable/13 # git fetch freebsd # if advancing # git merge --ff-only freebsd/stable/13 # if advancing # . . . In the above the commit is implicit as the HEAD for the branch named. There is also being more explicit about the commit that you want (branch implicit): # cd /usr/src # git fetch freebsd # if advancing # git reset --hard 08b8197a74 # use appropriate hashid # . . . This "reset --hard" command produces a "detached HEAD" notice that you can either ignore --or you can then create a local branch that uses that HEAD: # git checkout -b NEW_BRANCH_NAME For reference, from my context: # du -sAm /usr/fbsd/main-src/ /usr/fbsd/main-src/.git 2487 /usr/fbsd/main-src/ 1379 /usr/fbsd/main-src/.git So 2487 would estimate (C) as things are now for main or stable/13 . 2487-1379==1108 for the implicit, primary worktree that goes with the clone. A additional worktree tied to the above: # du -sAm /usr/fbsd/mm-src/ 1108 /usr/fbsd/mm-src/ So 2487+1108 == 3595 total using the additional worktree, i.e., (B). Just for reference for how much space (D) takes: # git clone -o freebsd --depth 1 -b main https://git.freebsd.org/src.git /usr/fbsd/main-shallow Cloning into '/usr/fbsd/main-shallow'... remote: Enumerating objects: 88695, done. remote: Counting objects: 100% (88695/88695), done. remote: Compressing objects: 100% (76042/76042), done. remote: Total 88695 (delta 18867), reused 51008 (delta 9483), pack-reused 0 Receiving objects: 100% (88695/88695), 258.57 MiB | 9.14 MiB/s, done. Resolving deltas: 100% (18867/18867), done. Updating files: 100% (85161/85161), done. # du -sAm /usr/fbsd/main-shallow/ /usr/fbsd/main-shallow/.git 1378 /usr/fbsd/main-shallow/ 271 /usr/fbsd/main-shallow/.git (The .git is branch specific only.) So about 2*1378 == 2756 total to also have a separate one for stable/13 in, say, /usr/fbsd/stable-13-shallow/ . === Mark Millard marklmi at yahoo.com ( dsl-only.net went away in early 2018-Mar)Received on Mon Jan 25 2021 - 06:37:40 UTC
This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:41:26 UTC