Re: git remote set-head automatically

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



A little more progress on what I'm going to have to do, github action,
without set-head the ref/HEAD isn't present

- uses: actions/checkout@v4
  with:
    ref: ${{ github.event.workflow_run.head_branch}}
    filter: "blob:none"
    fetch-depth: 0
- run: git remote set-head origin --auto # fixes otherwise the cat
will not find a file
- run: cat .git/refs/remotes/origin/HEAD

https://github.com/xenoterracide/gradle-convention/actions/runs/11917790368/job/33213687888

My problem of course isn't what *I* have to do, it's explaining to
other people what to do and why; as it feels like this could set-head
implicitly.

/usr/bin/git -c protocol.version=2 fetch --prune
--no-recurse-submodules --filter=blob:none origin
+refs/heads/*:refs/remotes/origin/* +refs/tags/*:refs/tags/*
+e1f39782ea2c90f5a9657ae88369599518b22a51:refs/remotes/pull/57/merge

On Tue, Nov 19, 2024 at 10:40 AM Caleb Cushing <xenoterracide@xxxxxxxxx> wrote:
>
> sounds great. I think I realized why I didn't have it. It's not done
> by `git remote add <origin> https://...`  my experiment was `git
> remote rm origin` and then `git remote add origin ... ; git fetch
> --all --prune` I think I also tried without the prune option. git
> version 2.46.1
>
> What I want mostly is for that HEAD ref to always exist. As far as
> there being ways to configure it, that's all good but I don't want to
> explain doing that to consumers of my code. I'd rather it just work
> for them, on clones, and add remotes or fetch if it's missing.
>
> I'm not super worried about it being updated as I feel like if that
> ever happens it's something loudly communicated, and I'm more willing
> to find it ok to make that an FAQ, if this breaks because that changed
> you can manually update that. Mostly I'm of the opinion that what I'm
> doing needs to work in various CI environments out of the box.
>
> Thanks for the info, hopefully soon (tm).
>
> On Sat, Nov 16, 2024 at 10:02 AM Bence Ferdinandy <bence@xxxxxxxxxxxxxx> wrote:
> >
> >
> > On Sat Nov 16, 2024 at 04:36, Jeff King <peff@xxxxxxxx> wrote:
> > > On Fri, Nov 15, 2024 at 09:34:28AM -0500, Caleb Cushing wrote:
> > >
> > >> Context: recently I've been trying to develop a feature for my Gradle
> > >> plugin that derives a semantic version from git describe.  In order to
> > >> achieve my next level of feature I need the HEAD Branch. Now, I can
> > >> get this branch using git remote show <remote> and parsing the output.
> > >> I'm a firm believer that it should be possible for me to write code,
> > >> long term even, without the internet; I did this once with my job when
> > >> I needed to go home to my parents who were very rural and didn't have
> > >> internet; I was able to keep working without access. I want that for
> > >> anyone that uses this tool.
> > >
> > > You should use the refs/remotes/<remote>/HEAD symref instead (or its
> > > alias, just "<remote>"), which is more convenient and doesn't hit the
> > > network. Which is exactly what...
> > >
> > >> Problem: I don't want to have to do a network request every time I do
> > >> a build, in fact I'd rather almost never have to do a network request.
> > >> Gradle makes reducing the network request to less than once per build
> > >> something ... unsupported. jgit doesn't expose support for fetching
> > >> this information. Then I found out that you could do `git remote
> > >> set-head <remote> <branch>` which appears to behave exactly how I'd
> > >> want and expect. It doesn't easily solve my problem though because I
> > >> want my solution to be generally applicable.
> > >
> > > ...set-head will set. So OK, but...
> > >
> > >> Ideal Long-Term Solution: git remote set-head happens automatically on
> > >> lone, and even fetch if it's not set. Explicit setting would override
> > >> any automatic setting; and it might be a good idea to automatically
> > >> unset if the HEAD branch disappears from the remote.
> > >
> > > We already do the equivalent of set-head on clone. If you do:
> > >
> > >   git clone https://github.com/git/git
> > >   cd git
> > >   git symbolic-ref refs/remotes/origin/HEAD
> > >
> > > you should see it pointing to "refs/remotes/origin/master" (and like you
> > > can refer to "origin/HEAD" or "origin" from git-log, etc). Are you not
> > > seeing that?
> > >
> > > We don't update it on fetch. That has been discussed, but there are some
> > > questions about when it should overwrite what's available locally. E.g.
> > > this thread:
> > >
> > >   https://lore.kernel.org/git/D3HBD7C1FR14.74FL1Q1S9UCB@xxxxxxxxxxxxxx/
> >
> > That part we already have pinned down: fetch will only update remote/HEAD if it
> > doesn't already exist. So running "init && remote add && fetch" should end you
> > up in the same place as "clone" (although fetch will report if the remote has
> > changed HEAD compared to what you have for transparency). If you _always_ want
> > to have the latest head you'll need to run "fetch && remote set-head --auto
> > [remote]" every time.
> >
> > Something like
> >         git fetch --all && git remote | xargs -i git remote set-head -a {}
> > covers everything.
> >
> > >
> > > There have been some patches in that direction but I have not kept up
> > > with the current state:
> > >
> > >   https://lore.kernel.org/git/20241023153736.257733-2-bence@xxxxxxxxxxxxxx/
> >
> > There's definitely going to be another round, but I think (hope :)) we're not
> > very far off from finishing.
> >
> > Best,
> > Bence
>
>
>
> --
> Caleb Cushing
>
> Appointments https://calendly.com/caleb-cushing
> https://xenoterracide.com



-- 
Caleb Cushing

Appointments https://calendly.com/caleb-cushing
https://xenoterracide.com





[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux