From 7a65f4bed3b688e95b464242bdf38018fe7d8a26 Mon Sep 17 00:00:00 2001 From: eleonore12345 Date: Wed, 10 Jul 2024 18:02:01 +0200 Subject: [PATCH] texte explicatif fini --- creation_repo.sh | 4 +- notes.odt | Bin 98930 -> 98198 bytes performance_tests.sh | 370 ++++++++++++++++++++++++++++++++++++------- readme.md | 93 +++++++---- texte_explicatif.txt | 155 +++++++++++++++++- 5 files changed, 531 insertions(+), 91 deletions(-) diff --git a/creation_repo.sh b/creation_repo.sh index ec278fa..72eaabb 100755 --- a/creation_repo.sh +++ b/creation_repo.sh @@ -52,7 +52,9 @@ if [ ! -d $REPO_NAME ]; then git commit -m"first 1M sample created" git tag start create_random_file 'sample1' '1M' - git add sample1 + touch texte + echo "un soleil bleu">texte + git add sample1 texte git commit -m"second 1M sample created" git branch secondary git checkout secondary diff --git a/notes.odt b/notes.odt index 0d1c8a0f3d291d222b04347de2b47cc007031213..d2f8ff3e9a8e00e06fbc712a0df4e225d464197b 100644 GIT binary patch delta 21779 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

hQ>ppz=EG&+p6@tfFtVS;{L}3f~ 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 U{(mSTjl)5lgiS%$I7*!V0k;dQ9smFU delta 22625 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%0A^n$NuvXQ&1r&X*iMTUddv$zJr+Rf<)+P4VXs>`- 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 cloning_text + git clone --recurse-submodules --progress --single-branch --no-local --depth=1 $1 &> cloning_text cd $REPO_NAME run git submodule update --init --recursive --force --remote --progress --depth=1 &> /dev/null cd .. @@ -124,7 +147,7 @@ test3(){ test4(){ section TEST4 echo "TEST 4: --depth=1 with single-branch (default) and reflog and gc" - git clone --recurse-submodules --recurse-submodules --progress --single-branch --no-local --depth=1 $1 &> cloning_text + git clone --recurse-submodules --progress --single-branch --no-local --depth=1 $1 &> cloning_text cd $REPO_NAME run git submodule update --init --recursive --force --remote --progress --depth=1 &> /dev/null git reset --hard @@ -149,7 +172,7 @@ test5(){ #pulling from the remote with sparse-checking enabled run git remote add -f origin ../$1 &> /dev/null run git submodule update --init --recursive --force --depth=1 --remote &> /dev/null - run git fetch --progress --tags --depth=1 origin &> /dev/null + run git fetch --progress --tags --depth=1 --prune --prune-tags origin &> /dev/null git checkout -f origin/main &> /dev/null get_storage_used . echo "memory usage: $mem" @@ -164,7 +187,7 @@ test6(){ section TEST6 run echo 'TEST 6: after addition of a 1M file' #initialization - git clone --recurse-submodules --progress --no-local $1 &> /dev/null + git clone --recurse-submodules --progress --depth=1 --no-local $1 &> /dev/null cd $REPO_NAME #run git submodule update --init --recursive --force --depth=1 get_storage_used . @@ -177,7 +200,7 @@ test6(){ cd ../../$REPO_NAME #fetching run git submodule update --init --recursive --force --remote &> /dev/null - run git fetch --progress --tags origin &> /dev/null + run git fetch --progress --tags --prune --prune-tags origin &> /dev/null git checkout -f origin/main &> /dev/null get_storage_used . mem_after=$mem @@ -192,7 +215,7 @@ test7(){ section TEST7 run echo 'TEST 7: after removal of a 1M file' #initialization - git clone --recurse-submodules --progress --no-local $1 &> /dev/null + git clone --recurse-submodules --progress --depth=1 --no-local $1 &> /dev/null cd $REPO_NAME get_storage_used . mem_before=$mem @@ -204,7 +227,7 @@ test7(){ cd ../../$REPO_NAME #fetching run git submodule update --init --recursive --force --remote &> /dev/null - run git fetch --progress --tags origin &> /dev/null + run git fetch --progress --tags --prune --prune-tags origin &> /dev/null git checkout -f origin/main &> /dev/null get_storage_used . mem_after=$mem @@ -220,7 +243,7 @@ test8(){ section TEST8 run echo 'TEST 8: after addition then removal of a 1M file' #initialization - git clone --recurse-submodules --progress --no-local $1 &> /dev/null + git clone --recurse-submodules --progress --depth=1 --no-local $1 &> /dev/null cd $REPO_NAME get_storage_used . mem_before=$mem @@ -235,7 +258,7 @@ test8(){ cd ../../$REPO_NAME #fetching run git submodule update --init --recursive --force --remote &> /dev/null - run git fetch --progress --tags origin &> /dev/null + run git fetch --progress --tags --prune --prune-tags origin &> /dev/null git checkout -f origin/main &> /dev/null get_storage_used . mem_after=$mem @@ -252,9 +275,8 @@ test9(){ section TEST9 run echo 'TEST 9: after addition of a 1M file' #initialization - git clone --recurse-submodules --progress --no-local $1 &> /dev/null + git clone --recurse-submodules --progress --depth=1 --no-local $1 &> /dev/null cd $REPO_NAME - echo "un truc écrit en plus" >> untexte get_storage_used . mem_before=$mem #modification of the remote repo @@ -264,7 +286,7 @@ test9(){ run git commit --quiet -m"fourth 1M sample created" cd ../../$REPO_NAME run git submodule update --init --recursive --force --depth=1 --remote &> /dev/null - run git fetch --progress --tags --depth=1 origin &> /dev/null + run git fetch --progress --tags --depth=1 --prune --prune-tags origin &> /dev/null git checkout -f origin/main &> /dev/null get_storage_used . mem_after=$mem @@ -279,7 +301,7 @@ test10(){ section TEST10 run echo 'TEST 10: after removal of a 1M file' #initialization - git clone --recurse-submodules --progress --no-local $1 &> /dev/null + git clone --recurse-submodules --progress --depth=1 --no-local $1 &> /dev/null cd $REPO_NAME get_storage_used . mem_before=$mem @@ -291,7 +313,7 @@ test10(){ cd ../../$REPO_NAME #fetching run git submodule update --init --recursive --force --depth=1 --remote &> /dev/null - git fetch --progress --tags --prune --depth=1 origin &> /dev/null + git fetch --progress --tags --depth=1 --prune --prune-tags origin &> /dev/null git checkout -f origin/main &> /dev/null get_storage_used . mem_after=$mem @@ -305,7 +327,7 @@ test10(){ test11(){ section TEST11 run echo 'TEST 11: after addition then removal of a 1M file' - git clone --recurse-submodules --progress --no-local $1 &> /dev/null + git clone --recurse-submodules --progress --depth=1 --no-local $1 &> /dev/null cd $REPO_NAME get_storage_used . mem_before=$mem @@ -320,7 +342,7 @@ test11(){ cd ../../$REPO_NAME #fetching run git submodule update --init --recursive --force --depth=1 --remote &> /dev/null - run git fetch --progress --tags --depth=1 origin &> /dev/null + run git fetch --progress --tags --depth=1 --prune --prune-tags origin &> /dev/null git checkout -f origin/main &> /dev/null get_storage_used . mem_after=$mem @@ -337,9 +359,8 @@ test12(){ section TEST12 run echo 'TEST 12: after addition of a 1M file' #initialization - git clone --recurse-submodules --progress --no-local $1 &> /dev/null + git clone --recurse-submodules --progress --depth=1 --no-local $1 &> /dev/null cd $REPO_NAME - echo "un truc écrit en plus" >> untexte get_storage_used . mem_before=$mem #modification of the remote repo @@ -349,7 +370,7 @@ test12(){ run git commit --quiet -m"fourth 1M sample created" cd ../../$REPO_NAME run git submodule update --init --recursive --force --depth=1 --remote &> /dev/null - run git fetch --progress --tags --depth=1 origin &> /dev/null + run git fetch --progress --tags --depth=1 --prune --prune-tags origin &> /dev/null git checkout -f origin/main &> /dev/null git reflog expire --expire=now --all &> /dev/null git gc --aggressive --prune=now &> /dev/null @@ -366,7 +387,7 @@ test13(){ section TEST13 run echo 'TEST 13: after removal of a 1M file' #initialization - git clone --recurse-submodules --progress --no-local $1 &> /dev/null + git clone --recurse-submodules --progress --depth=1 --no-local $1 &> /dev/null cd $REPO_NAME get_storage_used . mem_before=$mem @@ -378,7 +399,7 @@ test13(){ cd ../../$REPO_NAME #fetching run git submodule update --init --recursive --force --depth=1 --remote &> /dev/null - git fetch --progress --tags --prune --depth=1 origin &> /dev/null + git fetch --progress --tags --depth=1 --prune --prune-tags origin &> /dev/null git checkout -f origin/main &> /dev/null git reflog expire --expire=now --all &> /dev/null git gc --aggressive --prune=now &> /dev/null @@ -394,7 +415,7 @@ test13(){ test14(){ section TEST14 run echo 'TEST 14: after addition then removal of a 1M file' - git clone --recurse-submodules --progress --no-local $1 &> /dev/null + git clone --recurse-submodules --progress --depth=1 --no-local $1 &> /dev/null cd $REPO_NAME get_storage_used . mem_before=$mem @@ -409,7 +430,7 @@ test14(){ cd ../../$REPO_NAME #fetching run git submodule update --init --recursive --force --depth=1 --remote &> /dev/null - run git fetch --progress --tags --depth=1 origin &> /dev/null + run git fetch --progress --tags --depth=1 --prune --prune-tags origin &> /dev/null git checkout -f origin/main &> /dev/null git reflog expire --expire=now --all &> /dev/null git gc --aggressive --prune=now &> /dev/null @@ -428,9 +449,8 @@ test15(){ section TEST15 run echo 'TEST 15: after addition of a 1M file' #initialization - git clone --recurse-submodules --progress --no-local $1 &> /dev/null + git clone --recurse-submodules --progress --depth=1 --no-local $1 &> /dev/null cd $REPO_NAME - echo "un truc écrit en plus" >> untexte get_storage_used . mem_before=$mem #modification of the remote repo @@ -440,7 +460,7 @@ test15(){ run git commit --quiet -m"fourth 1M sample created" cd ../../$REPO_NAME run git submodule update --init --recursive --force --depth=1 --remote &> /dev/null - run git fetch --progress --tags --depth=1 origin &> /dev/null + run git fetch --progress --tags --depth=1 --prune --prune-tags origin &> /dev/null git reset --hard origin/main &> /dev/null get_storage_used . mem_after=$mem @@ -455,7 +475,7 @@ test16(){ section TEST16 run echo 'TEST 16: after removal of a 1M file' #initialization - git clone --recurse-submodules --progress --no-local $1 &> /dev/null + git clone --recurse-submodules --progress --depth=1 --no-local $1 &> /dev/null cd $REPO_NAME get_storage_used . mem_before=$mem @@ -467,7 +487,7 @@ test16(){ cd ../../$REPO_NAME #fetching run git submodule update --init --recursive --force --depth=1 --remote &> /dev/null - git fetch --progress --tags --prune --depth=1 origin &> /dev/null + git fetch --progress --tags --depth=1 --prune --prune-tags origin &> /dev/null git reset --hard origin/main &> /dev/null get_storage_used . mem_after=$mem @@ -481,7 +501,7 @@ test16(){ test17(){ section TEST17 run echo 'TEST 17: after addition then removal of a 1M file' - git clone --recurse-submodules --progress --no-local $1 &> /dev/null + git clone --recurse-submodules --progress --depth=1 --no-local $1 &> /dev/null cd $REPO_NAME get_storage_used . mem_before=$mem @@ -496,7 +516,7 @@ test17(){ cd ../../$REPO_NAME #fetching run git submodule update --init --recursive --force --depth=1 --remote &> /dev/null - run git fetch --progress --tags --depth=1 origin &> /dev/null + run git fetch --progress --tags --depth=1 --prune --prune-tags origin &> /dev/null git reset --hard origin/main &> /dev/null get_storage_used . mem_after=$mem @@ -511,7 +531,7 @@ test17(){ test18(){ section TEST18 run echo 'TEST 18: after addition of a 1M file' - git clone --recurse-submodules --progress --no-local $1 &> /dev/null + git clone --recurse-submodules --progress --depth=1 --no-local $1 &> /dev/null cd $REPO_NAME get_storage_used . mem_before=$mem @@ -523,7 +543,7 @@ test18(){ cd ../../$REPO_NAME #fetching run git submodule update --init --recursive --force --depth=1 --remote &> /dev/null - run git fetch --progress --tags --depth=1 origin &> /dev/null + run git fetch --progress --tags --depth=1 --prune --prune-tags origin &> /dev/null git reset --hard origin/main &> /dev/null git reflog expire --expire=now --all &> /dev/null git gc --aggressive --prune=now &> /dev/null @@ -540,7 +560,7 @@ test19(){ section TEST19 run echo 'TEST 19: after removal of a 1M file' #initialization - git clone --recurse-submodules --progress --no-local $1 &> /dev/null + git clone --recurse-submodules --progress --depth=1 --no-local $1 &> /dev/null cd $REPO_NAME get_storage_used . mem_before=$mem @@ -552,7 +572,7 @@ test19(){ cd ../../$REPO_NAME #fetching run git submodule update --init --recursive --force --depth=1 --remote &> /dev/null - git fetch --progress --tags --prune --depth=1 origin &> /dev/null + git fetch --progress --tags --depth=1 --prune --prune-tags origin &> /dev/null git reset --hard origin/main &> /dev/null git reflog expire --expire=now --all &> /dev/null git gc --aggressive --prune=now &> /dev/null @@ -568,7 +588,7 @@ test19(){ test20(){ section TEST20 run echo 'TEST 20: after addition then removal of a 1M file' - git clone --recurse-submodules --progress --no-local $1 &> /dev/null + git clone --recurse-submodules --progress --depth=1 --no-local $1 &> /dev/null cd $REPO_NAME get_storage_used . mem_before=$mem @@ -583,7 +603,7 @@ test20(){ cd ../../$REPO_NAME #fetching run git submodule update --init --recursive --force --depth=1 --remote &> /dev/null - run git fetch --progress --tags --depth=1 origin &> /dev/null + run git fetch --progress --tags --depth=1 --prune --prune-tags origin &> /dev/null git reset --hard origin/main &> /dev/null git reflog expire --expire=now --all &> /dev/null git gc --aggressive --prune=now &> /dev/null @@ -601,7 +621,7 @@ test21(){ section TEST21 run echo 'TEST 21: after addition of a 1M file' if [ "$WITH_SUBMODULE" = "true" ]; then - git clone --recurse-submodules --progress --no-local $1 &> /dev/null + git clone --recurse-submodules --progress --depth=1 --no-local $1 &> /dev/null cd $REPO_NAME get_storage_used . mem_before=$mem @@ -614,7 +634,7 @@ test21(){ cd ../../$REPO_NAME #fetching run git submodule update --init --recursive --force --depth=1 --remote &> /dev/null - run git fetch --progress --tags --depth=1 origin &> /dev/null + run git fetch --progress --tags --depth=1 --prune --prune-tags origin &> /dev/null git checkout -f origin/main &> /dev/null get_storage_used . mem_after=$mem @@ -633,7 +653,7 @@ test22(){ section TEST22 run echo 'TEST 22: after removal of a 1M file' if [ "$WITH_SUBMODULE" = "true" ]; then - git clone --recurse-submodules --progress --no-local $1 &> /dev/null + git clone --recurse-submodules --progress --depth=1 --no-local $1 &> /dev/null cd $REPO_NAME get_storage_used . mem_before=$mem @@ -646,7 +666,7 @@ test22(){ cd ../../$REPO_NAME #fetching run git submodule update --init --recursive --force --depth=1 --remote &> /dev/null - run git fetch --progress --tags --depth=1 origin &> /dev/null + run git fetch --progress --tags --depth=1 --prune --prune-tags origin &> /dev/null git checkout -f origin/main &> /dev/null get_storage_used . mem_after=$mem @@ -665,7 +685,7 @@ test23(){ section TEST23 run echo 'TEST 23: after addition then removal of a 1M file' if [ "$WITH_SUBMODULE" = "true" ]; then - git clone --recurse-submodules --progress --no-local $1 &> /dev/null + git clone --recurse-submodules --progress --depth=1 --no-local $1 &> /dev/null cd $REPO_NAME get_storage_used . mem_before=$mem @@ -681,7 +701,7 @@ test23(){ cd ../../$REPO_NAME #fetching run git submodule update --init --recursive --force --depth=1 --remote &> /dev/null - run git fetch --progress --tags --depth=1 origin &> /dev/null + run git fetch --progress --tags --depth=1 --prune --prune-tags origin &> /dev/null git checkout -f origin/main &> /dev/null get_storage_used . mem_after=$mem @@ -696,6 +716,199 @@ test23(){ fi } +# --depth=1 fetching+merging -X theirs with reflog and gc +test24(){ + section TEST24 + run echo 'TEST 24: after addition of a 1M file' + #initialization + git clone --recurse-submodules --progress --depth=1 --no-local $1 &> /dev/null + cd $REPO_NAME + get_storage_used . + mem_before=$mem + #modification of the remote repo + cd ../$REMOTE + create_random_file 'sample5' '1M' #adding a 1M file + run git add sample5 + run git commit --quiet -m"fourth 1M sample created" + cd ../../$REPO_NAME + run git submodule update --init --recursive --force --depth=1 --remote &> /dev/null + run git fetch --progress --tags --depth=1 --prune --prune-tags origin &> /dev/null + git merge -X theirs --allow-unrelated-histories &> /dev/null + git reflog expire --expire=now --all &> /dev/null + git gc --aggressive --prune=now &> /dev/null + get_storage_used . + mem_after=$mem + mem=$(($mem_after-$mem_before)) + echo "memory usage: +$mem" + cd ../$REMOTE + git reset --hard -q HEAD~1 + cd ../.. + rm -rf performance_testing +} +test25(){ + section TEST25 + run echo 'TEST 25: after removal of a 1M file' + #initialization + git clone --recurse-submodules --progress --depth=1 --no-local $1 &> /dev/null + cd $REPO_NAME + get_storage_used . + mem_before=$mem + #modification of the remote repo + cd ../$REMOTE + run rm sample0 + run git add sample0 + run git commit --quiet -m"1M sample0 deleted" + cd ../../$REPO_NAME + #fetching + run git submodule update --init --recursive --force --depth=1 --remote &> /dev/null + git fetch --progress --tags --depth=1 --prune --prune-tags origin &> /dev/null + git merge -X theirs --allow-unrelated-histories &> /dev/null + git reflog expire --expire=now --all &> /dev/null + git gc --aggressive --prune=now &> /dev/null + get_storage_used . + mem_after=$mem + mem=$(($mem_after-$mem_before)) + echo "memory usage: $mem" + cd ../$REMOTE + git reset --hard -q HEAD~1 + cd ../.. + rm -rf performance_testing +} +test26(){ + section TEST26 + run echo 'TEST 26: after addition then removal of a 1M file' + git clone --recurse-submodules --progress --depth=1 --no-local $1 &> /dev/null + cd $REPO_NAME + get_storage_used . + mem_before=$mem + #modification of the remote repo + cd ../$REMOTE + create_random_file 'sample5' '1M' #adding a 1M file + run git add sample5 + run git commit --quiet -m"fourth 1M sample created" + run rm sample5 + run git add sample5 + run git commit --quiet -m"1M "sample5" deleted" + cd ../../$REPO_NAME + #fetching + run git submodule update --init --recursive --force --depth=1 --remote &> /dev/null + run git fetch --progress --tags --depth=1 --prune --prune-tags origin &> /dev/null + git merge -X theirs --allow-unrelated-histories &> /dev/null + git reflog expire --expire=now --all &> /dev/null + git gc --aggressive --prune=now &> /dev/null + get_storage_used . + mem_after=$mem + mem=$(($mem_after-$mem_before)) + echo "memory usage: $mem" + cd ../$REMOTE + git reset --hard -q HEAD~2 + cd ../.. + rm -rf performance_testing +} + +# --depth=1 fetching+merging -s ours with reflog and gc +test27(){ + section TEST27 + run echo 'TEST 27: after addition of a 1M file' + #initialization + git clone --recurse-submodules --progress --depth=1 --no-local $1 &> /dev/null + cd $REPO_NAME + get_storage_used . + mem_before=$mem + #modification of the remote repo + cd ../$REMOTE + create_random_file 'sample5' '1M' #adding a 1M file + run git add sample5 + run git commit --quiet -m"fourth 1M sample created" + cd ../../$REPO_NAME + run git submodule update --init --recursive --force --depth=1 --remote &> /dev/null + run git fetch --progress --tags --depth=1 --prune --prune-tags origin &> /dev/null + git switch -c temp origin/main &> /dev/null #creating a temporary branch identical to origin/main + git merge -s ours --allow-unrelated-histories main &> /dev/null + git checkout main &> /dev/null + git merge --allow-unrelated-histories temp &> /dev/null + git branch -D temp &> /dev/null + git reflog expire --expire=now --all &> /dev/null + git gc --aggressive --prune=now &> /dev/null + get_storage_used . + mem_after=$mem + mem=$(($mem_after-$mem_before)) + echo "memory usage: +$mem" + cd ../$REMOTE + git reset --hard -q HEAD~1 + cd ../.. + rm -rf performance_testing +} +test28(){ + section TEST28 + run echo 'TEST 28: after removal of a 1M file' + #initialization + git clone --recurse-submodules --progress --depth=1 --no-local $1 &> /dev/null + cd $REPO_NAME + get_storage_used . + mem_before=$mem + #modification of the remote repo + cd ../$REMOTE + run rm sample0 + run git add sample0 + run git commit --quiet -m"1M sample0 deleted" + cd ../../$REPO_NAME + #fetching + run git submodule update --init --recursive --force --depth=1 --remote &> /dev/null + git fetch --progress --tags --depth=1 --prune --prune-tags origin &> /dev/null + git switch -c temp origin/main &> /dev/null #creating a temporary branch identical to origin/main + git merge -s ours --allow-unrelated-histories main &> /dev/null + git checkout main &> /dev/null + git merge --allow-unrelated-histories temp &> /dev/null + git branch -D temp &> /dev/null + git reflog expire --expire=now --all &> /dev/null + git gc --aggressive --prune=now &> /dev/null + get_storage_used . + mem_after=$mem + mem=$(($mem_after-$mem_before)) + echo "memory usage: $mem" + cd ../$REMOTE + git reset --hard -q HEAD~1 + cd ../.. + rm -rf performance_testing +} +test29(){ + section TEST29 + run echo 'TEST 29: after addition then removal of a 1M file' + git clone --recurse-submodules --progress --depth=1 --no-local $1 &> /dev/null + cd $REPO_NAME + get_storage_used . + mem_before=$mem + #modification of the remote repo + cd ../$REMOTE + create_random_file 'sample5' '1M' #adding a 1M file + run git add sample5 + run git commit --quiet -m"fourth 1M sample created" + run rm sample5 + run git add sample5 + run git commit --quiet -m"1M "sample5" deleted" + cd ../../$REPO_NAME + #fetching + run git submodule update --init --recursive --force --depth=1 --remote &> /dev/null + run git fetch --progress --tags --depth=1 --prune --prune-tags origin &> /dev/null + git switch -c temp origin/main &> /dev/null #creating a temporary branch identical to origin/main + git merge -s ours --allow-unrelated-histories main &> /dev/null + git checkout main &> /dev/null + #git merge --allow-unrelated-histories temp &> /dev/null + git branch -D temp &> /dev/null + git reflog expire --expire=now --all &> /dev/null + git gc --aggressive --prune=now &> /dev/null + get_storage_used . + mem_after=$mem + mem=$(($mem_after-$mem_before)) + echo "memory usage: $mem" + cd ../$REMOTE + git reset --hard -q HEAD~2 + cd ../.. + rm -rf performance_testing +} + + while getopts ":hn:a" option; do case $option in h) # display Help @@ -719,30 +932,39 @@ if [ "$ALL_TESTS" = "true" ]; then test4 $REMOTE test5 $REMOTE echo $(section "Tests on the updating of the repository") - section "classic fetching" + section "classic fetching+checking out" test6 $REMOTE test7 $REMOTE test8 $REMOTE - echo $(section "fetching with --depth=1") + echo $(section "fetching+checking out with --depth=1") test9 $REMOTE test10 $REMOTE test11 $REMOTE - echo $(section "--depth=1 fetching with reflog and gc") + echo $(section "--depth=1 fetching+checking out reflog and gc") test12 $REMOTE test13 $REMOTE test14 $REMOTE - echo $(section "--depth=1 fetching with reset --hard") + echo $(section "--depth=1 fetching+ reset --hard") test15 $REMOTE test16 $REMOTE test17 $REMOTE - echo $(section "--depth=1 fetching with reset --hard and reflog and gc") + echo $(section "--depth=1 fetching+ reset --hard and reflog and gc") test18 $REMOTE test19 $REMOTE test20 $REMOTE - echo $(section "--depth=1 fetching after modification applied in submodule") + echo $(section "--depth=1 fetching+checking out after modification applied in submodule") test21 $REMOTE test22 $REMOTE test23 $REMOTE + echo $(section "--depth=1 fetching+merging -X theirs with reflog and gc") + test24 $REMOTE + test25 $REMOTE + test26 $REMOTE + echo $(section "--depth=1 fetching+merging -s ours with reflog and gc") + test27 $REMOTE + test28 $REMOTE + test29 $REMOTE + elif [ -n "$TEST_NUM" ]; then case $TEST_NUM in @@ -774,8 +996,40 @@ elif [ -n "$TEST_NUM" ]; then test12 $REMOTE;; 13) test13 $REMOTE;; + 14) + test14 $REMOTE;; + 15) + test15 $REMOTE;; + 16) + test16 $REMOTE;; + 17) + test17 $REMOTE;; + 18) + test18 $REMOTE;; + 19) + test19 $REMOTE;; + 20) + test20 $REMOTE;; 21) test21 $REMOTE;; + 22) + test22 $REMOTE;; + 23) + test23 $REMOTE;; + 24) + test24 $REMOTE;; + 25) + test25 $REMOTE;; + 26) + test26 $REMOTE;; + 26) + test26 $REMOTE;; + 27) + test27 $REMOTE;; + 28) + test28 $REMOTE;; + 29) + test29 $REMOTE;; *) echo "Error: Invalid test number" die;; diff --git a/readme.md b/readme.md index db030d8..f2eed5c 100644 --- a/readme.md +++ b/readme.md @@ -1,40 +1,34 @@ ## Testing of differeng cloning methods Our objective is to find the least-consuming method in terms of memory and bandwidth resources. We are interested in cloning one specific state of the repository. We are not interested in its history or the possibility to change it from the server where it has been cloned. The first step is done by the script creation_repo.sh which creates an adequate repository to act as a local remote. The testing in itself is done by performance_tests.sh. -NB:The large file storage is not tested by this script because it relies on additional remote stockage and we are interested in reducing the overall stockage for environmental purposes. ## Creation of the test repository -The script creation_repo.sh creates a performance_testing repository. +The script creation_repo.sh creates a remote/performance_testing repository. NAME creation_repo.sh SYNOPSIS - creation_repo.sh [-h] + creation_repo.sh [-h] [-s] DESCRIPTION - It creates a remote directory in the current directory, then create a remote/performance_testing git repository. This git repository is filled with randomly generated binary. + This script creates a ./remote directory in the current directory, then creates a remote/performance_testing git repository. + This git repository is filled with randomly generated binary files described in the readme.md. OPTIONS -h prints the help. + -s creates a submodule remote/submodule_for_performance_testing and includes it in remote/performance_testing. " Here is a history of the commits: ### branch main -commit f665df376fa57880b5edfb85b156c7703601980e (tag: start) -sample0 1M created -commit a17812c13a69986c1103e0d06ff0a0b59a3a4a63 -sample1 1M created -commit bd9d8e9421c3253abba47b9def480f1b2d595568 -sample3 1M created -commit 0e599f3b47bf3200dc6e2734df0c6e655c0d8dde -sample4 5M created -commit effb3cab262e6e1e8242e524e1862b6f77d7ad38 -sample4 5M deleted +commit sample0 1M created (tag: start) +commit sample1 1M created +commit sample3 1M created +commit sample4 5M created +commit sample4 5M deleted +[if -s is selected] commit adding submodule_for_performance_testing module ### branch secondary -commit 643cdbbda81f4c4f26513b9d6ecca3d436e97040 -sample0 1M created -commit b4bac1f2a2c1b4ab325751748b9496cccc65b082 -sample1 1M created -commit e69695f08e79c160045b3319297597a9d8c9b513 -sample2 500K created +commit sample0 1M created +commit sample1 1M created +commit sample2 500K created -Which gives us the latest state: +Which gives the latest state: ### branch main sample0 1M sample1 1M @@ -44,8 +38,16 @@ sample0 1M sample1 1M sample2 500K +If the -s option is selected, submodule_for_performance_testing is created with this history of commits: +### branch main +commit first 1M sample created + +which gives the latest state: +### branch main +sub_sample0 + ## Testing -The script performance_tests.sh measures memory and bandwidth usage for different git commands. It sources creation_repo.sh in order to have an adequate repository to test on. It also sources the script driglibash-base. +The script performance_tests.sh measures memory and bandwidth usage for different git commands. It sources the script driglibash-base. It executes creation_repo.sh in order to have an adequate repository to test on. NAME performance_tests.sh SYNOPSIS @@ -55,13 +57,42 @@ OPTIONS -n number executes test number -h prints the help. DESCRIPTION - This script is in writing. It allows you to measure memory and bandwidth usage. The first four test different cloning methods. Te following change the local remote by adding a 1M "sample5" file before testing fetching and merging commands. + This script is in writing. It allows you to measure memory and bandwidth usage. The first four test different cloning methods. Te following apply changes to the local remote before testing fetching and merging commands. TEST0: classic cloning - TEST1: --single-branch - TEST2: --depth=1 --no-single-branch - TEST3: --depth=1 - TEST4: sparse-checking 1M sample0 only - _________________________________________ - TEST5: classic fetching and merging - TEST6: - \ No newline at end of file + TEST1: --single-branch cloning + TEST2: --depth=1 --no-single-branch cloning + TEST3: --depth=1 cloning + TEST4: --depth=1 with reflog and gc cloning + TEST5: sparse-checking 1M sample0 cloning + _________________ + TEST6: classic fetching+checking out after addition of a 1M file + TEST7: classic fetching+checking out after removal of a 1M file + TEST8: classic fetching+checking out after addition then removal of a 1M file + + TEST9: --depth=1 fetching+checking out after addition of a 1M file + TEST10: --depth=1 fetching+checking out after removal of a 1M file + TEST11: --depth=1 fetching+checking out after addition then removal of 1M a file + + TEST12: --depth=1 fetching+checking out with reflog annd gc after addition of a 1M file + TEST13: --depth=1 fetching+checking out with reflog annd gc after removal of a 1M file + TEST14: --depth=1 fetching+checking out with reflog annd gc after addition then removal of a 1M file + + TEST15: --depth=1 fetching+ --reset=hard after addition of a 1M file + TEST16: --depth=1 fetching+ --reset=hard after removal of a 1M file + TEST17: --depth=1 fetching+ --reset=hard after addition then removal of a 1M file + + TEST18: --depth=1 fetching+ --reset=hard and reflog and gc after addition of a 1M file + TEST19: --depth=1 fetching+ --reset=hard and reflog and gc after removal of a 1M file + TEST20: --depth=1 fetching+ --reset=hard and reflog and gc after addition then removal of a 1M file + + TEST21: --depth=1 fetching+checking out after addition of a 1M file in submodule + TEST22: --depth=1 fetching+checking out after removal of a 1M file in submodule + TEST23: --depth=1 fetching+checking out after addition then removal of a 1M file in submodule + + TEST24: --depth=1 fetching+merging -X theirs with reflog and gc after addition of a 1M file + TEST25: --depth=1 fetching+merging -X theirs with reflog and gc after removal of a 1M file + TEST26: --depth=1 fetching+merging -X theirs with reflog and gc after addition then removal of a 1M file + + TEST27: --depth=1 fetching+merging -s ours with reflog and gc after addition of a 1M file + TEST28: --depth=1 fetching+merging -s ours with reflog and gc after removal of a 1M file + TEST29: --depth=1 fetching+merging -s ours with reflog and gc after addition then removal of a 1M file" \ No newline at end of file diff --git a/texte_explicatif.txt b/texte_explicatif.txt index 4639368..d82d68a 100644 --- a/texte_explicatif.txt +++ b/texte_explicatif.txt @@ -11,7 +11,7 @@ Comment minimiser la consommation en ressources mémoire et flux de données d'u Le dépôt Git créé n'enverra aucune donnée au remote. Il n'aura aucune utilité de l'historique. - Il pourra éventuellement conserver certains fichiers locaux en plus de ses clonages Git. Il incluera les éventuels submodules. Il peut vouloir télécharger un commit d'une certaine branche ou tag. + Il pourra éventuellement conserver certains fichiers locaux en plus de ses clonages Git. En cas de conflit, le remote aura toujours raison. Il incluera les éventuels submodules. Il peut vouloir télécharger un commit d'une certaine branche ou tag. # Procédé @@ -78,6 +78,7 @@ git gc --aggressive --prune=now aggressive invoque repack et prend plus de temps. repack défait et refait les packs, qui sont des unités de compression. +Cette combinaison ne permet pas de garder des fichiers compilés, néanmoins elle est extrêmement efficace en terme de gains de mémoire. # Détails Voici un résumé de différentes pistes explorées afin de réduire l'empreinte du dépôt Git. @@ -98,5 +99,157 @@ C'est un mécanisme très intéressant, que nous ne retenons pas pour la même ## Suppression de l'historique L'usage de la commande git filter-branch est déconseillé par la documentation Git. Elle présente plusieurs failles de sécurité et de performance. Elle permet de réécrire l'historique des branches grâce à des filtres. +La librairie Java repo-cleaner fonctionne, néanmoins la documentation Git estime que la librairie Python filter-repo est plus rapide et plus sûre. Nous ne souhaitons pas devoir installer Python ou Java donc ne creusons pas plus ces deux possibilités. + +Nous souhaitons supprimer tout l'historique sans filtrer, donc la commande git fetch --depth=1 suivie d'un git checkout ou d'un git reset nous convient. + +## checkout ? merge ? reset ? +Une fois que l'on a fetched les modifications dans notre dossier local remote/, quelle est la meilleure façon de les appliquer à notre index et working directory ? + +Une première idée est d'utiliser git merge. On ne souhaite pas résoudre de conflits manuellement. Le remote doit toujours prévaloir sur les différences locales. +Les commandes git merge -s ours (applique la stratégie ours) et git merge -X theirs (applique la stratégie ort avec l'option theirs) sont intéressantes. +### git merge -X theirs +Cette commande applique une stratégie ort qui en cas de conflit, donne la prévalence à theirs. +Néanmoins, puisque l'on travaille en --depth=1, les deux branches n'ont pas d'ancêtre commun, et on doit d'ailleurs fournir l'option --allow-unrelated-histories. L'absence d'ancêtre commun empêche Git de reconnaître les similitudes à l'intérieur d'un même fichier. N'importe quelle modification d'un fichier tracé sur ours, même sur une nouvelle ligne, causera ainsi un conflit et sera écrasée. Cette commande permet tout de même de sauvegarder les fichiers nouvellement créés sur ours, qu'ils soient committés ou non. +Elle peut donc se montrer intéressante dans notre cas. +Un gros inconvénient de cette commande est en cas de délétion d'un fichier sur theirs : il ne sera pas supprimé sur ours. + +### git merge -s ours +git merge -s ours va ignorer tous les changements et créations de fichiers committés sur theirs. Elle va également ignorer les modifications non committées. En revanche, les créations de fichier non-committées sont conservées. C'est le même résultat qu'avec la commande git reset --hard. +C'est une option intéressante dans notre cas, car on pourrait vouloir sauvegarder uniquement des fichiers de compilation non committés. +Comme l'option git merge -s theirs n'existe pas, on doit faire une petite manipulation : +#on veut merge origin/main sur main, en donnant la prévalence à origin/main +#création d'une nouvelle branche temporaire temp que l'on check out, sourcée sur origin/main +git switch -c temp origin/main +#merge de main sur temp, en donnant la prévalence à temp qui est identique à origin/main +git merge -s ours --allow-unrelated-histories main +#on retourne sur main +git checkout main +#on merge temp. +git merge --allow-unrelated-histories temp +#suppression de temp +git branch -D temp + +### git checkout –force -B main origin/main + +Cette commande est équivalente à git merge -s ours décrite ci-dessus. Elle évite la petite manipulation de branche temporaire. En revanche, on finit en detached HEAD state, ce qui n'est pas un problème dans notre cas puisque l'on ne souhaite pas push de modification depuis notre dépôt. + +### git reset --hard +git reset --hard va ignorer tous les changements et créations de fichiers committés sur theirs. Elle va également ignorer les modifications non committées. En revanche, les créations de fichier non-committées sont conservées. C'est le même résultat qu'avec la commande git merge -s ours, mais en une ligne. +C'est une option intéressante dans notre cas, car on pourrait vouloir sauvegarder uniquement des fichiers de compilation non committés. + +Les tests nous montrent que les options les plus économes en mémoire sont git merge -s ours et git --reset hard, qui font la même chose. Néanmoins git reset --hard tient en une ligne et n'implique pas la création d'une branche temporaire, c'est donc celle que nous retenons. + + +RESULTATS des tests : + + ======================================= Tests on the initial populating of the repository +============================================================= TEST0 +TEST 0: classic cloning. +memory usage: 22668 +bandwidth usage (submodule excluded): 8.49 MiB +============================================================= TEST1 +TEST 1: --single-branch cloning. +memory usage: 22168 +bandwidth usage (submodule excluded): 8.00 MiB +============================================================= TEST2 +TEST 2: --depth=1 --no-single-branch +memory usage: 17552 +bandwidth usage (submodule excluded): 3.49 MiB +============================================================= TEST3 +TEST 3: --depth=1 with single-branch (default)) +memory usage: 17052 +bandwidth usage (submodule excluded): 3.00 MiB +============================================================= TEST4 +TEST 4: --depth=1 with single-branch (default) and reflog and gc +HEAD is now at 23700cf adding submodule_for_performance_testing module +memory usage: 17056 +bandwidth usage (submodule excluded): 3.00 MiB +============================================================= TEST5 +TEST 5 : sparse-checking only sample0 with depth=1 +memory usage: 10060 +bandwidth usage (submodule excluded): unknown +============================================ Tests on the updating of the repository +================================================= classic fetching+checking out +============================================================= TEST6 +TEST 6: after addition of a 1M file +memory usage: +2108 +============================================================= TEST7 +TEST 7: after removal of a 1M file +memory usage: -972 +============================================================= TEST8 +TEST 8: after addition then removal of a 1M file +memory usage: 1088 +============================================== fetching+checking out with --depth=1 +============================================================= TEST9 +TEST 9: after addition of a 1M file +memory usage: +2112 +============================================================= TEST10 +TEST 10: after removal of a 1M file +memory usage: -968 +============================================================= TEST11 +TEST 11: after addition then removal of a 1M file +memory usage: 48 +========================================= --depth=1 fetching+checking out reflog and gc +============================================================= TEST12 +TEST 12: after addition of a 1M file +memory usage: +2052 +============================================================= TEST13 +TEST 13: after removal of a 1M file +memory usage: -1020 +============================================================= TEST14 +TEST 14: after addition then removal of a 1M file +memory usage: 4 +================================================ --depth=1 fetching+ reset --hard +============================================================= TEST15 +TEST 15: after addition of a 1M file +memory usage: +2116 +============================================================= TEST16 +TEST 16: after removal of a 1M file +memory usage: -964 +============================================================= TEST17 +TEST 17: after addition then removal of a 1M file +memory usage: 52 +======================================= --depth=1 fetching+ reset --hard and reflog and gc +============================================================= TEST18 +TEST 18: after addition of a 1M file +memory usage: 2056 +============================================================= TEST19 +TEST 19: after removal of a 1M file +memory usage: -1016 +============================================================= TEST20 +TEST 20: after addition then removal of a 1M file +memory usage: 8 +============================ --depth=1 fetching+checking out after modification applied in submodule +============================================================= TEST21 +TEST 21: after addition of a 1M file +memory usage: 2112 +============================================================= TEST22 +TEST 22: after removal of a 1M file +memory usage: -976 +============================================================= TEST23 +TEST 23: after addition then removal of a 1M file +memory usage: 48 +==================================== --depth=1 fetching+merging -X theirs with reflog and gc +============================================================= TEST24 +TEST 24: after addition of a 1M file +memory usage: +2056 +============================================================= TEST25 +TEST 25: after removal of a 1M file +memory usage: 8 +============================================================= TEST26 +TEST 26: after addition then removal of a 1M file +memory usage: 8 +===================================== --depth=1 fetching+merging -s ours with reflog and gc +============================================================= TEST27 +TEST 27: after addition of a 1M file +memory usage: +2056 +============================================================= TEST28 +TEST 28: after removal of a 1M file +memory usage: -1016 +============================================================= TEST29 +TEST 29: after addition then removal of a 1M file +memory usage: 8 +