git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Urs Thuermann <urs@isnogud.escape.de>
To: git@vger.kernel.org
Subject: How to keep log history when renaming and changing simultaneously
Date: 17 Apr 2017 13:36:10 +0200	[thread overview]
Message-ID: <ygfpogbb711.fsf@tehran.isnogud.escape.de> (raw)

Sometimes I need to rename and change a file in one commit.  One
example would be a file foo.h that begins with

    #ifndef FOO_H
    #define FOO_H

which should be renamed bar.h and have the FOO_H changed to BAR_H.
In subversion I would

    svn mv foo.h bar.h; vi bar.h; svn ci

and then a

    svn log bar.h

also shows the history of that file when it was named foo.h.

This does not work in git.  After committing,

    git mv foo.h bar.h; vi bar.h; git commit -a

the command

    git log --follow bar.h

shows only the history of the file when it was named bar.h, but not
its life as foo.h.

The only workaround I found was to do the rename and the change in two
separate commits, so that git sees the same name and the same SHA hash
which allows it to follow the files' history.  This can be a problem
when the intermediate version with either only the change or only the
rename doesn't compile correctly.

Is there a better way to do this in git?

A similar problem is splitting a file into two files.  With subversion
I'd do

    printf "void foo() {}\nint main() { foo(); }\n" > prog.c
    svn add prog.c; svn ci -m "Add prog.c"

Then I would split

    svn cp prog.c foo.c; svn cp prog.c main.c; svn rm prog.c
    printf "2d\nwq\n" | ed foo.c; printf "1d\nwq\n" | ed main.c
    svn ci -m "Split prog.c"; svn up

and I get

    $ svn log -v
    ------------------------------------------------------------------------
    r2 | urs | 2017-04-17 10:03:06 +0200 (Mon, 17 Apr 2017) | 1 line
    Changed paths:
       A /foo.c (from /prog.c:1)
       A /main.c (from /prog.c:1)
       D /prog.c
    
    Split prog.c
    ------------------------------------------------------------------------
    r1 | urs | 2017-04-17 10:02:51 +0200 (Mon, 17 Apr 2017) | 1 line
    Changed paths:
       A /prog.c
    
    Add prog.c
    ------------------------------------------------------------------------

And I can also see this when I run svn log on one of both files.	
How could I do this in git?

urs

             reply	other threads:[~2017-04-17 11:45 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-04-17 11:36 Urs Thuermann [this message]
2017-04-17 12:17 ` How to keep log history when renaming and changing simultaneously Duy Nguyen
2017-04-17 20:34 ` Igor Djordjevic
2017-04-17 21:36   ` Urs Thuermann
2017-04-18  1:15     ` Jacob Keller
2017-04-18  3:20       ` Junio C Hamano

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

  List information: http://vger.kernel.org/majordomo-info.html

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

  git send-email \
    --in-reply-to=ygfpogbb711.fsf@tehran.isnogud.escape.de \
    --to=urs@isnogud.escape.de \
    --cc=git@vger.kernel.org \
    /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 public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).