All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Ævar Arnfjörð Bjarmason" <avarab@gmail.com>
To: Matthieu Moy <git@matthieu-moy.fr>
Cc: Per Lundberg <per.lundberg@hibox.tv>,
	Duy Nguyen <pclouds@gmail.com>,
	Git Mailing List <git@vger.kernel.org>,
	jost@tcs.ifi.lmu.de, Joshua Jensen <jjensen@workspacewhiz.com>,
	Junio C Hamano <gitster@pobox.com>,
	Clemens Buchacher <drizzd@gmx.net>,
	"Holger Hellmuth \(IKS\)" <hellmuth@ira.uka.de>,
	Kevin Ballard <kevin@sb.org>
Subject: Re: [RFC PATCH] Introduce "precious" file concept
Date: Mon, 12 Nov 2018 10:49:44 +0100	[thread overview]
Message-ID: <87o9au39s7.fsf@evledraar.gmail.com> (raw)
In-Reply-To: <1205132135.1189562.1542013731020.JavaMail.zimbra@matthieu-moy.fr>


On Mon, Nov 12 2018, Matthieu Moy wrote:

> "Per Lundberg" <per.lundberg@hibox.tv> wrote:
>
>> On 11/11/18 5:41 PM, Duy Nguyen wrote:
>> > On Sun, Nov 11, 2018 at 1:33 PM Ævar Arnfjörð Bjarmason
>> > <avarab@gmail.com> wrote:
>>
>> >> That will lose no data, and in the very rare cases where a checkout of
>> >> tracked files would overwrite an ignored pattern, we can just error out
>> >> (as we do with the "Ok to overwrite" branch removed) and tell the user
>> >> to delete the files to proceed.
>> > There's also the other side of the coin. If this refuse to overwrite
>> > triggers too often, it can become an annoyance.
>
> I may have missed some cases, but to me the cases when checkout may try
> to overwrite an ignored file are essentially:
>
> * Someone "git add"ed a file meant to be ignored by mistake (e.g.
>   "git add -f *.o").
>
> * A file that was meant to be kept private (e.g. config.mak.dev) ends
>   up being tracked. This may happen when we find a way to make per-developer
>   settings the same for everyone.

Yes, the cases under discussion here are all cases where a tracked file
clobbers a file matching a pattern in in .gitignore.

What I'd add to your list is:

* Some projects (I've seen this in the wild) add e.g. *.mp3 or whatever
  else usually doesn't belong in the repo as a "soft ignore". This is
  something we've never recommended, but have implicitly supported since
  the only caveats are a) you need a one-off "git add -f" and then
  they're tracked b) them being missing from "status" before being
  tracked c) the issue under discussion here.

* Cases where e.g. filename changes to a directory or globs because of
  that make this more complex.

> I both cases I'd want at least to be notified that something is going on,
> and in the second I'd probably want to keep my local file around.
>> If we feel thrashable is stretching it too far (which I don't think it
>> is), we could add a "core.ignore_files_are_trashable" setting that
>> brings back the old semantics, for those who have a strong feeling about it.
>
> May I remind an idea I sugested in an old thread: add an intermediate level
> where ignored files to be overwritten are renamed (eg. foo -> foo~ like Emacs'
> backup files):
>
> https://public-inbox.org/git/vpqd3t9656k.fsf@bauges.imag.fr/
>
> One advantage of the "rename" behavior is that it's safer that the current,
> but still not very disturbing for people who like the current behavior. This
> makes it a good candidate for a default behavior.
>
> This could come in complement with this thread's "precious" concept:
>
> * If you know what you're doing and know that such or such file is precious,
>   mark it as such and Git will never overwrite it.
>
> * If you don't know about precious files, just keep the default setting and
>   the worse that can happen is to get your file overwritten with a bakup
>   of the old version kept around.
>
> This would probably play better with a notion of "precious" files than with
> a notion of "trashable" files.

I used to think this foo -> foo~ approach made the most sense (and said
as much in
https://public-inbox.org/git/871s8qdzph.fsf@evledraar.gmail.com/) but I
think it's probably best not to do it and just error out, because:

 * We'd still need to handle the cases where "tests" the file collides
   with "tests" the directory. Then where do we move the colliding file?
   ~/.git/lost+found/* ? We could handle the subdir case with another
   special-case though...

 * I think such silent action will just leave users more confused, and
   in many cases (e.g. a merge) whatever message we print out will be
   missed in a deluge of other messaging, and they'll probably miss it.

   I'd like to avoid a case where a bunch of *~ files get committed
   because the user's workflow is (and some beginner git users do this):

       git pull && git add . && git commit && git push

   As the "pull" would now invoke a merge that would do this rename.

 * If I have the "foo" file open in my editor (a plausible way to run
   into this) I switch to another terminal, do the merge, miss the
   message, then re-save "foo". Now I have both "foo" and "foo~"
   on-disk. Another case where we should just refuse until the user
   resolves the situation to avoid the confusion.

  reply	other threads:[~2018-11-12  9:49 UTC|newest]

Thread overview: 86+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-10-15 13:01 Ignored files being silently overwritten when switching branches Per Lundberg
2018-10-16  6:40 ` Jeff King
2018-10-16  9:10   ` Ævar Arnfjörð Bjarmason
2010-08-17  5:21     ` git merge, .gitignore, and silently overwriting untracked files Joshua Jensen
2010-08-17 19:33       ` Junio C Hamano
2010-08-18 23:39         ` [PATCH] optionally disable overwriting of ignored files Clemens Buchacher
2010-08-19 10:41           ` Jakub Narebski
2010-08-20 18:48             ` Clemens Buchacher
2010-08-20 19:01               ` Joshua Jensen
2010-08-20 20:35           ` Junio C Hamano
2010-08-21  8:05             ` Clemens Buchacher
2010-08-22  7:25               ` Junio C Hamano
2010-08-22  8:20                 ` Clemens Buchacher
2010-10-09 22:39               ` Kevin Ballard
2010-08-21 13:23             ` Clemens Buchacher
2010-10-09 13:52             ` [PATCH 0/5] do not overwrite untracked files in leading path Clemens Buchacher
2010-10-09 13:52             ` [PATCH 1/5] t7607: use test_commit and test_must_fail Clemens Buchacher
2010-10-10  6:35               ` Jonathan Nieder
2010-10-10  8:35                 ` [PATCH 1/5 v2] t7607: use test-lib functions and check MERGE_HEAD Clemens Buchacher
2010-10-13 21:33                   ` Junio C Hamano
2010-10-13 21:59                   ` Junio C Hamano
2010-10-09 13:52             ` [PATCH 2/5] t7607: add leading-path tests Clemens Buchacher
2010-10-09 19:14               ` Johannes Sixt
2010-10-10  8:38                 ` [PATCH 2/5 v2] " Clemens Buchacher
2010-10-09 13:52             ` [PATCH 3/5] add function check_ok_to_remove() Clemens Buchacher
2010-10-13 21:43               ` Junio C Hamano
2010-10-09 13:52             ` [PATCH 4/5] lstat_cache: optionally return match_len Clemens Buchacher
2010-10-09 13:53             ` [PATCH 5/5] do not overwrite files in leading path Clemens Buchacher
2010-10-13 21:57               ` Junio C Hamano
2010-10-13 22:34                 ` Clemens Buchacher
2010-10-15  6:48                   ` Clemens Buchacher
2010-10-15 18:47                     ` Junio C Hamano
2010-08-20 20:46           ` [PATCH] optionally disable overwriting of ignored files Junio C Hamano
2010-08-21  6:48             ` [PATCH v2] " Clemens Buchacher
2010-08-23  8:33           ` [PATCH] " Matthieu Moy
2010-08-31 18:44             ` Heiko Voigt
2010-08-23  9:37           ` Matthieu Moy
2010-08-23 13:56             ` Holger Hellmuth
2010-08-23 15:11               ` Clemens Buchacher
2010-08-23 15:57                 ` Junio C Hamano
2010-08-24  7:28                   ` Clemens Buchacher
2010-08-24 16:19                     ` Junio C Hamano
2018-11-06 12:41       ` Checkout deleted semi-untracked file Steffen Jost
2018-11-06 15:12         ` Ævar Arnfjörð Bjarmason
2018-11-11  9:52           ` [RFC PATCH] Introduce "precious" file concept Nguyễn Thái Ngọc Duy
2018-11-11 12:15             ` Bert Wesarg
2018-11-11 12:33             ` Ævar Arnfjörð Bjarmason
2018-11-11 13:06               ` Ævar Arnfjörð Bjarmason
2018-11-12 16:14                 ` Duy Nguyen
2018-11-11 15:41               ` Duy Nguyen
2018-11-11 16:55                 ` Ævar Arnfjörð Bjarmason
2018-11-12  7:35                 ` Per Lundberg
2018-11-12  9:08                   ` Matthieu Moy
2018-11-12  9:49                     ` Ævar Arnfjörð Bjarmason [this message]
2018-11-12 10:26                       ` Junio C Hamano
2018-11-12 12:45                         ` Ævar Arnfjörð Bjarmason
2018-11-12 13:02                           ` Junio C Hamano
2018-11-12 16:07                     ` Duy Nguyen
2018-11-12 23:22               ` brian m. carlson
2018-11-26  9:30                 ` Per Lundberg
2018-11-26 10:28                   ` Ævar Arnfjörð Bjarmason
2018-11-26 12:49                   ` Junio C Hamano
2018-11-27 15:08                     ` Ævar Arnfjörð Bjarmason
2018-11-28  3:58                       ` Junio C Hamano
2018-11-28 21:54                         ` Ævar Arnfjörð Bjarmason
2018-11-29  5:04                           ` Junio C Hamano
2018-12-01  6:21                           ` Duy Nguyen
2018-11-26 15:26                   ` Duy Nguyen
2018-11-26 15:34                     ` Ævar Arnfjörð Bjarmason
2018-11-26 15:40                       ` Duy Nguyen
2018-11-26 15:47                         ` Ævar Arnfjörð Bjarmason
2018-11-26 15:55                           ` Duy Nguyen
2018-11-27  9:43                             ` Per Lundberg
2018-11-27 12:55                               ` Jacob Keller
2018-11-27 14:50                                 ` Per Lundberg
2018-11-28  1:21                                   ` brian m. carlson
2018-11-28  6:54                                     ` Per Lundberg
2018-11-27 15:19                                 ` Duy Nguyen
2018-12-06 18:39                                 ` Duy Nguyen
2018-11-26 16:02                 ` Eckhard Maaß
2018-11-11 12:59             ` Junio C Hamano
2018-11-26 19:38             ` [PATCH v2 0/2] Precios files round two Nguyễn Thái Ngọc Duy
2018-11-26 19:38               ` [PATCH v2 1/2] Introduce "precious" file concept Nguyễn Thái Ngọc Duy
2018-11-26 19:38               ` [PATCH v2 2/2] unpack-trees: support core.allIgnoredFilesArePreciousWhenMerging Nguyễn Thái Ngọc Duy
2018-10-16 15:05     ` Ignored files being silently overwritten when switching branches Duy Nguyen
2018-10-18  1:55       ` 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

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

  git send-email \
    --in-reply-to=87o9au39s7.fsf@evledraar.gmail.com \
    --to=avarab@gmail.com \
    --cc=drizzd@gmx.net \
    --cc=git@matthieu-moy.fr \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=hellmuth@ira.uka.de \
    --cc=jjensen@workspacewhiz.com \
    --cc=jost@tcs.ifi.lmu.de \
    --cc=kevin@sb.org \
    --cc=pclouds@gmail.com \
    --cc=per.lundberg@hibox.tv \
    /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.
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.