all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Stefan Kangas <stefan@marxist.se>
To: tomas@tuxteam.de
Cc: Mathias Dahl <mathias.dahl@gmail.com>,
	Emacs developers <emacs-devel@gnu.org>,
	Yuri Khan <yuri.v.khan@gmail.com>
Subject: Re: Renaming files with git not all that bad?
Date: Thu, 9 Dec 2021 14:18:21 -0800	[thread overview]
Message-ID: <CADwFkm=hJn+oA3zNvMRtCJNr+BVTa3b621QcO73K2+s6OKqDGg@mail.gmail.com> (raw)
In-Reply-To: <YbIlqWM6xq7yREGc@tuxteam.de>

<tomas@tuxteam.de> writes:

> On Thu, Dec 09, 2021 at 03:55:34PM +0100, Stefan Kangas wrote:
>> Yuri Khan <yuri.v.khan@gmail.com> writes:
>>
>> > There is also a trick to split a file into multiple parts where each
>> > part retains its history.
>>
>> Thanks, I didn't know about this but will see if I can make it work
>> for the splitting up of image-dired.el.
>
> Based on [1], I once did:
>
>   #+file: ~/bin/gitlib
>   #+begin_src sh
>     #!/bin/bash
>     set -ex
>     # FIXME sanity checks missing!
>     # See git-sh-setup on some helpers for this
>     if [ $# -lt 2 -o $# -gt 3 ] ; then
>       echo "Usage: $0 orig copy [commit-message]"
>       exit 1
>     fi
>
>     orig="$1"
>     copy="$2"
>     message=${3:-"split off $copy from $orig"}
>
>     if [ -e "$copy" ] ; then
>       echo "$copy already exists: bailing out"
>       exit 1
>     fi
>     if [ ! -f "$orig" ] ; then
>       echo "$orig isn't an existing file: bailing out"
>       # FIXME might want to check that it /is/ a git file
>       exit 1
>     fi
>
>     echo "$message"
>
>     git mv "$orig" "$copy"
>     git commit -nm "$message"
>     REV=$(git rev-parse HEAD)
>     git reset --hard HEAD^
>     TMP=$(mktemp tmp-XXXXXX)
>     # note that $TMP exists after the mktemp, thus -f
>     git mv -f "$orig" "$TMP"
>     git commit -nm "$message"
>     # this fails because of conflicts: expected
>     git merge "$REV" || true
>     git commit -anm "$message"
>     git mv "$TMP" "$orig"
>     git commit -nm "$message"
>   #+end_src

Cool!

I'm not sure about this method, as it seems safer to use a named branch
instead of referring to some SHA1 directly.  Maybe that won't make any
difference to git though?

It's been over a decade since I last looked into how git stores data in
any detail, but IIRC a branch name is just a pointer to some SHA1 hash
recorded in a text file.



  reply	other threads:[~2021-12-09 22:18 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-12-08 21:50 Splitting image-dired.el into smaller files Stefan Kangas
2021-12-08 22:24 ` Stefan Monnier
2021-12-08 22:54   ` Stefan Kangas
2021-12-09  1:05 ` Lars Ingebrigtsen
2021-12-09  7:28   ` Eli Zaretskii
2021-12-09 13:58     ` Stefan Kangas
2021-12-09 14:03       ` Eli Zaretskii
2022-01-27 21:26         ` Mathias Dahl
2021-12-09  3:20 ` Renaming files with git not all that bad? Stefan Kangas
2021-12-09  3:56   ` Phil Sainty
2021-12-09  8:43     ` Andreas Schwab
2021-12-09  9:00       ` tomas
2021-12-09  9:24     ` Eli Zaretskii
2021-12-09 13:57       ` Stefan Kangas
2021-12-09  5:40   ` Yuri Khan
2021-12-09  6:02     ` Tassilo Horn
2021-12-09  6:35       ` Yuri Khan
2021-12-09  7:04         ` Tassilo Horn
2021-12-09  7:28           ` Yuri Khan
2021-12-09 22:03         ` Stefan Kangas
2021-12-10 12:28           ` Tassilo Horn
2021-12-11 12:11           ` Yuri Khan
2021-12-09 14:55     ` Stefan Kangas
2021-12-09 15:50       ` tomas
2021-12-09 22:18         ` Stefan Kangas [this message]
2021-12-10  8:17           ` tomas
2022-08-21  0:56 ` Splitting image-dired.el into smaller files Stefan Kangas
2022-08-21  5:50   ` Eli Zaretskii
2022-08-21 14:32     ` Stefan Kangas
2022-08-21 14:35       ` Eli Zaretskii
2022-08-21 15:11         ` Stefan Kangas
2022-08-21 15:16           ` Lars Ingebrigtsen
2022-08-21 15:20           ` Eli Zaretskii
2022-08-21 15:22             ` Lars Ingebrigtsen
2022-08-21 17:02             ` Stefan Monnier
2022-08-23 19:02             ` Stefan Kangas
2022-08-23 19:09               ` Eli Zaretskii
2022-08-23 19:53                 ` Stefan Kangas
2022-08-21 16:20   ` Juri Linkov
2022-08-22 13:08     ` Stefan Kangas
2022-08-22 15:18       ` Eli Zaretskii

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CADwFkm=hJn+oA3zNvMRtCJNr+BVTa3b621QcO73K2+s6OKqDGg@mail.gmail.com' \
    --to=stefan@marxist.se \
    --cc=emacs-devel@gnu.org \
    --cc=mathias.dahl@gmail.com \
    --cc=tomas@tuxteam.de \
    --cc=yuri.v.khan@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.