meta data for this page
Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
git:split_merge_repos [2017/02/20 13:48] niziak [Merge another repo (RRR) into directory of repo (LLL)] |
git:split_merge_repos [2024/01/17 11:48] (current) niziak |
||
---|---|---|---|
Line 1: | Line 1: | ||
+ | ====== Split or merge repos ====== | ||
+ | |||
====== Merge repos into one ====== | ====== Merge repos into one ====== | ||
Line 19: | Line 21: | ||
Then modify file location of repo BBB to be in desired path and merge it into repo LLL. | Then modify file location of repo BBB to be in desired path and merge it into repo LLL. | ||
<code bash> | <code bash> | ||
+ | |||
+ | ######### WAY 2 | ||
+ | # Clone RRR repo temporary to change all file paths to new repo. | ||
+ | cd tmp | ||
+ | git clone http://URI_to_RRR_repo | ||
+ | git checkout main | ||
+ | # now move files from remote repo RRR into correct path: | ||
+ | mkdir app_RRR # create new location path (which will be merged to destination RRR repo) | ||
+ | git checkout -b branch_change_file_location | ||
+ | git mv -k * app_RRR/src | ||
+ | git mv src app_RRR/src | ||
+ | git mv .gitignore .gitlab-ci.yml .gitmodules app_RRR/src | ||
+ | |||
+ | git commit -m "location of app_RRR adapted to local repo" | ||
+ | |||
+ | # optionally reword all commits: | ||
+ | git rebase --root -x 'git commit --amend' | ||
+ | |||
+ | cd LLL_repo | ||
+ | git remote add RRR /tmp/cloned_RRR_repo | ||
+ | git fetch RRR | ||
+ | git merge RRR/branch_change_file_location --allow-unrelated-histories | ||
+ | ######### WAY 2 END | ||
+ | |||
+ | ######### WAY 1 | ||
git remote add RRR http://URI_to_RRR_repo | git remote add RRR http://URI_to_RRR_repo | ||
git fetch RRR | git fetch RRR | ||
- | git checkout -b branch_change_file_location RRR/master | + | git checkout -b branch_change_file_location RRR/main |
# now move files from remote repo RRR into correct path: | # now move files from remote repo RRR into correct path: | ||
Line 33: | Line 60: | ||
git merge branch_change_file_location --allow-unrelated-histories | git merge branch_change_file_location --allow-unrelated-histories | ||
git commit | git commit | ||
+ | ######### WAY 1 END | ||
# cleanup | # cleanup | ||
Line 38: | Line 66: | ||
git branch -d branch_change_file_location | git branch -d branch_change_file_location | ||
- | # optionally: | + | # optionally - rebase: |
+ | # rebase can be problematic. Conflict will be on commonly used paths (readme, Makefile, src, etc) | ||
+ | # between LLL and RRR repo | ||
git rebase | git rebase | ||
# push merged master | # push merged master | ||
Line 79: | Line 109: | ||
</code> | </code> | ||
+ | |||
+ | ====== Split one file from repo ====== | ||
+ | |||
+ | <code bash> | ||
+ | # reduce repo to one folder | ||
+ | git filter-branch --prune-empty --subdirectory-filter etc -- --all | ||
+ | |||
+ | # reduce repo to some given file/files | ||
+ | git filter-branch -f --prune-empty --index-filter 'git rm --cached --ignore-unmatch $(git ls-files | grep -v "tmarc.xsl\|check-pazpar2.sh")' | ||
+ | |||
+ | # clean | ||
+ | git reflog expire --expire=now --all && git gc --prune=now --aggressive | ||
+ | </code> | ||
+ | |||
+ | |||