xref: /petsc/doc/developers/mrfork.md (revision 0311516ef26856f9037490a5104151a9a9d292aa)
1*90249ba7SSatish Balay(mr_fork)=
2*90249ba7SSatish Balay
3*90249ba7SSatish Balay# Checkout fork merge request branch
4*90249ba7SSatish Balay
5*90249ba7SSatish Balay`Developers` at times, need to checkout and build changes from a merge request fork branch. Any one of the following methods can be used:
6*90249ba7SSatish Balay
7*90249ba7SSatish Balay- Checkout `COMMIT-SHA` of the branch HEAD. It is available on the "Commits" tab of the merge request web page.
8*90249ba7SSatish Balay
9*90249ba7SSatish Balay  ```console
10*90249ba7SSatish Balay  % git fetch origin <COMMIT-SHA>
11*90249ba7SSatish Balay  % git checkout FETCH_HEAD
12*90249ba7SSatish Balay  ```
13*90249ba7SSatish Balay
14*90249ba7SSatish Balay- Checkout branch using the repository `URL`. The `URL with branchname` is available as "Source branch" hyperlink on merge request web page.
15*90249ba7SSatish Balay
16*90249ba7SSatish Balay  ```console
17*90249ba7SSatish Balay  % git fetch <URL> <branchname>
18*90249ba7SSatish Balay  % git checkout FETCH_HEAD
19*90249ba7SSatish Balay  ```
20*90249ba7SSatish Balay
21*90249ba7SSatish Balay- Setup a local Git clone to access the merge request branch via the `MR-NUMBER`. Here use the following in `.git/config`:
22*90249ba7SSatish Balay
23*90249ba7SSatish Balay  ```console
24*90249ba7SSatish Balay  [remote "origin"]
25*90249ba7SSatish Balay        url = https://gitlab.com/petsc/petsc.git
26*90249ba7SSatish Balay        pushurl = git@gitlab.com:petsc/petsc.git
27*90249ba7SSatish Balay        fetch = +refs/heads/*:refs/remotes/origin/*
28*90249ba7SSatish Balay        fetch = +refs/merge-requests/*:refs/remotes/origin/merge-requests/*
29*90249ba7SSatish Balay  ```
30*90249ba7SSatish Balay
31*90249ba7SSatish Balay  Now, the branch is available to checkout:
32*90249ba7SSatish Balay
33*90249ba7SSatish Balay  ```console
34*90249ba7SSatish Balay  % git fetch
35*90249ba7SSatish Balay  % git checkout origin/merge-requests/<MR-NUMBER>/head
36*90249ba7SSatish Balay  ```
37*90249ba7SSatish Balay
38*90249ba7SSatish Balay# Commit and push changes to a merge request fork branch
39*90249ba7SSatish Balay
40*90249ba7SSatish BalayOnly `Owners/Maintainers` can push commits to a merge request fork branch. Here, use the `ssh-URL` for the Git repository.
41*90249ba7SSatish Balay
42*90249ba7SSatish Balay```console
43*90249ba7SSatish Balay% git fetch <ssh-URL> <branchname>
44*90249ba7SSatish Balay% git checkout -b <branchname> FETCH_HEAD
45*90249ba7SSatish Balay% git push -u <ssh-URL> <branchname>
46*90249ba7SSatish Balay% (edit/commit)
47*90249ba7SSatish Balay% git push
48*90249ba7SSatish Balay```
49*90249ba7SSatish Balay
50*90249ba7SSatish BalayNotes:
51*90249ba7SSatish Balay
52*90249ba7SSatish BalayFor example, with `merge request` at <https://gitlab.com/petsc/petsc/-/merge_requests/8619> we have:
53*90249ba7SSatish Balay
54*90249ba7SSatish Balay- `MR-NUMBER` = `8619`
55*90249ba7SSatish Balay- `COMMIT-SHA` = `1b741c341f10772b6231f15a4abcef052bfe2d90` ("Copy commit SHA" of the HEAD commit from the "Commits" tab)
56*90249ba7SSatish Balay- `URL with branchname` = `https://gitlab.com/paul.kuehner/petsc/-/tree/add-tao-get-constraints` ("Copy link" of "Source branch")
57*90249ba7SSatish Balay- `URL` = `https://gitlab.com/paul.kuehner/petsc`
58*90249ba7SSatish Balay- `ssh-URL` = `git@gitlab.com:paul.kuehner/petsc.git`
59*90249ba7SSatish Balay- `branchname` = `add-tao-get-constraints`
60*90249ba7SSatish Balay
61