svnadmin equivalent?

Warner Losh imp at bsdimp.com
Fri Dec 11 18:13:34 UTC 2020


Hi Marc

Thanks for the detailed explanation.

I've updated https://github.com/bsdimp/freebsd-git-docs/blob/main/faq.md to
include details discussed here.

Please let me know if I've missed anything, or if I've botched something.

BTW, I wasn't sure why you needed to reset the default first. Most people
will have that or just that an the notes. There's no reason you can't add
this too that I can see, but maybe I'm overlooking something.

Warner

On Fri, Dec 11, 2020 at 9:32 AM Warner Losh <imp at bsdimp.com> wrote:

>
>
> On Fri, Dec 11, 2020 at 8:49 AM Marc Branchaud <marcnarc at gmail.com> wrote:
>
>> On 2020-12-10 11:37 p.m., Warner Losh wrote:
>> > On Thu, Dec 10, 2020, 9:35 PM Konstantin Belousov <kostikbel at gmail.com>
>> > wrote:
>> >>
>> >> Can we have it scripted, per repo, and scripts available somewhere ?
>> >> It is convoluted list of per-repo branches.  I want a simple means to
>> >> run something and get the guaranteed clone of all material from the
>> repo.
>> >>
>> >
>> > git clone --mirror
>>
>> "git clone --mirror" fetches everything, but it has two potentially
>> confusing side-effects:
>>
>> * Mirroring creates a "bare" local repository without any checked-out
>> files (all you get are the contents of the remote's .git/ directory).
>> This doesn't mean it's unusable, just that it's not *directly* usable
>> (for example, see Mathieu's suggestion about "git worktree add").
>>
>> * More subtly, mirroring also removes the distinction between your local
>> branches and the remote repo's branches.  So you don't end up with any
>> "origin/XXXX" branches.  This can be very confusing when you've made
>> commits to your local "main" branch that get clobbered by your next fetch.
>>
>> Here's how to get absolutely everything in your regular-clone'd repo
>> while preserving the "origin/" namespace for the official repo's branches:
>>
>> # First reset the config to the default that a non-mirror clone creates:
>> git config --replace-all remote.origin.fetch
>> '+refs/heads/*:refs/remotes/origin/*'
>> (WARNING: If you've configured other remote.origin.fetch specs, like to
>> retrieve the "notes" namespace, this command will remove those and
>> you'll have to re-configure them.)
>>
>> # Then configure fetch to also get all the other stuff:
>> git config --add remote.origin.fetch '+refs/*:refs/origin/*'
>>
>> The default setting is important to make commands that interpret branch
>> names work properly with remote ("origin/<branchname>") branches,
>> because they look for remote branch names under the refs/remotes/
>> namespace.
>>
>> The second setting puts *every* reference in the remote repo into your
>> repo's "refs/origin/" namespace.  Since nothing in git uses the
>> "refs/origin/" namespace we're free to do whatever we want with it
>> without breaking anything.  The slight inconvenience is that to access a
>> non-branch, non-tag symbol we have to prefix it with "refs/origin/" (not
>> just "origin/"):
>>         git show refs/origin/internal/admin:mentors
>>         git log refs/origin/vendor/zlib/1.2.10
>>         git checkout -b my-arm64-hacks refs/origin/projects/arm64
>>
>
> That;s good advice. I'll add this to my FAQ.
>
> It is a bit like checking out from http://svn.freebsd.org/base, though,
> which gets a lot of chaff...
>
> Warner
>


More information about the freebsd-git mailing list