Hacker News new | past | comments | ask | show | jobs | submit login

OK, Git is easy? I got a trivial sounding task for ya: delete 1 file from (all commits in) a repository with 100's or 1000's of commits.

Without using any external tools. You've got 5 minutes. Should be plenty of time to delete 1 file and/or figure out how to do that simple task right?

Good luck.




How does that sound trivial? Let's rephrase it.

Delete every mention of a single file in all history of work of a large team over multiple years.

How does that sound trivial?


When I learned Git, many tutorials were pretty clear that what goes into git stays there as they were added, which is the whole point of a vcs.

So I would dare to say that your example is not entirely a good one? In my 10 years of using Git, in both privately and professional this has happened exactly zero times. But that's just me.

To use an somewhat odd analogy, it would be akin to asking the average car driver to replace the crown wheel in the differential. I'm certain everyone can do it with enough youtube tutorials and practice, but.. I digress.

But actually it makes sense, Git is like a car, once they understand what basic problem it tries to solve and learn the commands to push, pull, commit, rebase and merge, it's enough as learning navigating traffic and use the car from point a to point b.

So I believe git is easy enough for normal, but of course when situations like your example occurs it's harder (but understandable considering what problem the tool is trying to solve).

I am not being condescending here, it's my real world experience that tells me that very few people have issues with git, and looking at how many use github/gitlab/gitea/etc everyday shows the same.


Delete the file from (past) commits? Isn't the whole point (idiomatic way) that you don't do that, and only delete it in the newest commit?

Unless you mean some intentionally weird scenario, where you want to just delete the file to prevent it from being accessible period. But that's (afaik) against the whole concept of git, and so verry much outside the intended use.

Do I understand your example?


It's a fairly common problem when people realise they have inadvertently committed a secrets file.

You could say "well don't commit secrets files" but that doesn't immediately solve the problem.


In that case the secret is blown so you rotate it and leaving in the repo isn't an issue.


Maybe the repo hasn't been made public yet and it's a clean up before release.


> Without using any external tools.

How about: using the right tool for the job?

In this case, the right tool would be “git filter-repo”.


The whole point of git is to preserve history. So removing stuff from history is obviously not super easy.

"Without external tool" Why? Git defines a data structure on disk and not a monopoly on imolementation. The right tool for this job would be BFG.


> Without using any external tools.

git-filter-branch is the only mass-rewrite helper tool that I know of in git(1) and it's deprecated.


Check out “git filter-repo”.

It’s safer, faster, easier to use.

Oh, and not built-in.


The rule was to not use any external tools so it doesn't qualify.

But you're right. filter-repo is a great tool. You can even use pleasant Python "callbacks" instead of a hodge-podge of env variables and shell snippets.


The rule is arbitrary and unhelpful and only helps drive a rhetorical point, not actual advice: you really don’t want to do this without a tool as safe and fast as filter-repo. Even recommending filter-branch is just aligning the footgun slightly.

If a point is to be made that confirms OP: removing a file completely isn’t trivial, and thinking one did when one didn’t it is too easy.


> Even recommending filter-branch is just aligning the footgun slightly.

Who recommended it?


It ships with git, so without extra tools, it is the implied solution to OP’s question, and the default choice for many.

I’m not saying they recommend it, as the question drives a rhetorical point. But it’s worth mentioning “git filter-repo” as a solution you will not stumble into as easily as the more difficult, brittle and slow “git filter-branch”.


What I said in my one-sentence-reply is that there are no non-deprecated, built-in tools that helps with this task in a streamlined manner. Which means by extension that it is not a trivial task.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: