clone: --dissociate option to mark that reference is only temporary
While use of the --reference option to borrow objects from an existing local repository of the same project is an effective way to reduce traffic when cloning a project over the network, it makes the resulting "borrowing" repository dependent on the "borrowed" repository. After running git clone --reference=P $URL Q the resulting repository Q will be broken if the borrowed repository P disappears. The way to allow the borrowed repository to be removed is to repack the borrowing repository (i.e. run "git repack -a -d" in Q); while power users may know it very well, it is not easily discoverable. Teach a new "--dissociate" option to "git clone" to run this repacking for the user. Helped-by: Johannes Sixt <j6t@kdbg.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
@ -198,4 +198,21 @@ test_expect_success 'clone using repo pointed at by gitfile as reference' '
|
||||
test_cmp expected "$base_dir/O/.git/objects/info/alternates"
|
||||
'
|
||||
|
||||
test_expect_success 'clone and dissociate from reference' '
|
||||
git init P &&
|
||||
(
|
||||
cd P && test_commit one
|
||||
) &&
|
||||
git clone P Q &&
|
||||
(
|
||||
cd Q && test_commit two
|
||||
) &&
|
||||
git clone --no-local --reference=P Q R &&
|
||||
git clone --no-local --reference=P --dissociate Q S &&
|
||||
# removing the reference P would corrupt R but not S
|
||||
rm -fr P &&
|
||||
test_must_fail git -C R fsck &&
|
||||
git -C S fsck
|
||||
'
|
||||
|
||||
test_done
|
||||
|
Reference in New Issue
Block a user