Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

The attribution problem solution #102

Open
webknjaz opened this issue Dec 20, 2023 · 0 comments
Open

The attribution problem solution #102

webknjaz opened this issue Dec 20, 2023 · 0 comments

Comments

@webknjaz
Copy link
Contributor

https://blog.jaraco.com/skeleton/#history-is-forever suggests that the attribution problem is unsolvable but that's only partially true. While it's not possible to preserve the authorship of each line on squash, it's possible to retrieve the original authors before doing this and list them via the Co-Authored-By trailers. This would attribute that large commit to a whole lot of people. It's also possible to use tags instead of branches for archiving (but that's not what I'm going to talk about here).

Several years ago we were migrating a bunch of content out of ansible-core into separate repos. We made a script to rewrite stuff and make those repos according to scenarios.
I was also concerned about attribution and researched retrieving the authors. My patch didn't go in, because it was last-minute. But the PR is still around and could be helpful to others facing a similar problem: ansible-community/collection_migration#497. Later on, I also suggested this solution to a Sphinx extension: sphinx-contrib/spelling#60 (comment).

TL;DR here's how one can extract such a list:

$ git log '--pretty=format:%(trailers:key=Co-Authored-By,separator=%x0A)%x0A%an <%ae>%x0A%cn <%ce>' | sort | uniq

You can then stick everything into the commit message and have GitHub link the commit to all those people.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant