mirror of
https://github.com/tdurieux/anonymous_github.git
synced 2026-09-12 21:58:57 +02:00
453 lines
24 KiB
HTML
453 lines
24 KiB
HTML
<div class="paper-faq">
|
|
<div class="paper-faq-hero">
|
|
<div class="paper-faq-eyebrow">Help</div>
|
|
<h1 class="paper-faq-title">Answers to the <em>questions</em> that come up most.</h1>
|
|
<p class="paper-faq-lede">
|
|
If something's missing, write to us —
|
|
<a href="https://github.com/tdurieux/anonymous_github/issues/new?template=issue_report.yml" target="_blank" rel="noopener">report a bug on GitHub</a>.
|
|
</p>
|
|
</div>
|
|
<div class="paper-faq-body">
|
|
<aside class="paper-faq-toc">
|
|
<div class="paper-faq-toc-head">Contents</div>
|
|
<nav>
|
|
<a href="#faq-general">General</a>
|
|
<a href="#faq-features">Features</a>
|
|
<a href="#faq-limitations">Limitations</a>
|
|
<a href="#faq-privacy">Privacy & Security</a>
|
|
<a href="#faq-hosting">Self-Hosting</a>
|
|
</nav>
|
|
</aside>
|
|
<section class="faq-section" aria-label="FAQs">
|
|
<div>
|
|
|
|
<!-- General -->
|
|
<h4 class="faq-cat">
|
|
<i class="fas fa-info-circle mr-2"></i>General
|
|
</h4>
|
|
<div class="panel-group" id="faq-general" role="tablist" aria-multiselectable="true">
|
|
<div class="panel panel-default mb-3">
|
|
<div class="panel-heading p-3" role="tab" id="headingWhatIs">
|
|
<h3 class="panel-title">
|
|
<a class="collapsed" role="button" data-toggle="collapse" data-parent="#faq-general" href="#whatIs" aria-expanded="false" aria-controls="whatIs">
|
|
What is Anonymous GitHub?
|
|
</a>
|
|
</h3>
|
|
</div>
|
|
<div id="whatIs" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingWhatIs">
|
|
<div class="panel-body p-3">
|
|
<p>
|
|
Anonymous GitHub is a free, open-source tool that anonymizes GitHub repositories and pull requests
|
|
for double-anonymous (double-blind) peer review. It replaces identifying information — such as
|
|
the repository owner, organization name, and custom terms — so that reviewers cannot determine
|
|
the identity of the authors through the code repository.
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="panel panel-default mb-3">
|
|
<div class="panel-heading p-3" role="tab" id="headingHowWork">
|
|
<h3 class="panel-title">
|
|
<a class="collapsed" role="button" data-toggle="collapse" data-parent="#faq-general" href="#howWork" aria-expanded="false" aria-controls="howWork">
|
|
How does Anonymous GitHub work?
|
|
</a>
|
|
</h3>
|
|
</div>
|
|
<div id="howWork" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingHowWork">
|
|
<div class="panel-body p-3">
|
|
<p>
|
|
Anonymous GitHub either downloads the complete repository and anonymizes the content, or proxies
|
|
requests to GitHub on the fly. In both cases, the original and anonymized versions of files are
|
|
cached on the server. The system automatically detects and replaces the repository owner,
|
|
organization name, and repository name. You can also specify additional custom terms to anonymize
|
|
using one-per-line regex patterns.
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="panel panel-default mb-3">
|
|
<div class="panel-heading p-3" role="tab" id="headingScope">
|
|
<h3 class="panel-title">
|
|
<a class="collapsed" role="button" data-toggle="collapse" data-parent="#faq-general" href="#scope" aria-expanded="false" aria-controls="scope">
|
|
What is the scope of anonymization?
|
|
</a>
|
|
</h3>
|
|
</div>
|
|
<div id="scope" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingScope">
|
|
<div class="panel-body p-3">
|
|
<p>
|
|
In double-anonymous peer review, the boundary of anonymization is the paper plus its online
|
|
appendix — not the entire internet. Searching for any part of the paper or the online appendix
|
|
can be considered a deliberate attempt to break anonymity. Anonymous GitHub anonymizes the
|
|
repository owner, organization, repository name, file and directory names, and file contents
|
|
across all text-based file types.
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="panel panel-default mb-3">
|
|
<div class="panel-heading p-3" role="tab" id="headingCost">
|
|
<h3 class="panel-title">
|
|
<a class="collapsed" role="button" data-toggle="collapse" data-parent="#faq-general" href="#cost" aria-expanded="false" aria-controls="cost">
|
|
How much does it cost?
|
|
</a>
|
|
</h3>
|
|
</div>
|
|
<div id="cost" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingCost">
|
|
<div class="panel-body p-3">
|
|
<p>
|
|
Anonymous GitHub is completely free to use. However, the server costs hundreds of dollars per year
|
|
to maintain. If you find the service useful, a small donation would be greatly appreciated. You can
|
|
support the project by
|
|
<a href="https://github.com/sponsors/tdurieux/" target="_blank">sponsoring on GitHub</a>,
|
|
donating through <a href="https://ko-fi.com/tdurieux" target="_blank">Ko-fi</a>, or by clicking
|
|
the "Support me" button on the site.
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Features -->
|
|
<h4 class="faq-cat">
|
|
<i class="fas fa-cogs mr-2"></i>Features
|
|
</h4>
|
|
<div class="panel-group" id="faq-features" role="tablist" aria-multiselectable="true">
|
|
<div class="panel panel-default mb-3">
|
|
<div class="panel-heading p-3" role="tab" id="headingFormats">
|
|
<h3 class="panel-title">
|
|
<a class="collapsed" role="button" data-toggle="collapse" data-parent="#faq-features" href="#formats" aria-expanded="false" aria-controls="formats">
|
|
Which file formats are supported?
|
|
</a>
|
|
</h3>
|
|
</div>
|
|
<div id="formats" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingFormats">
|
|
<div class="panel-body p-3">
|
|
<p>
|
|
Anonymous GitHub can display and render a wide variety of file types:
|
|
</p>
|
|
<ul>
|
|
<li><strong>Text and source code</strong> — displayed with syntax highlighting</li>
|
|
<li><strong>Markdown</strong> — rendered as formatted HTML</li>
|
|
<li><strong>Images</strong> (PNG, JPG, SVG, etc.) — displayed inline</li>
|
|
<li><strong>PDFs</strong> — rendered directly in the browser</li>
|
|
<li><strong>Jupyter Notebooks</strong> — rendered with code cells and outputs</li>
|
|
</ul>
|
|
<p>
|
|
Only text-based files are anonymized. Anonymous GitHub analyzes the content of each file to
|
|
determine whether it is textual or binary.
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="panel panel-default mb-3">
|
|
<div class="panel-heading p-3" role="tab" id="headingPR">
|
|
<h3 class="panel-title">
|
|
<a class="collapsed" role="button" data-toggle="collapse" data-parent="#faq-features" href="#pullRequests" aria-expanded="false" aria-controls="pullRequests">
|
|
Can I anonymize pull requests?
|
|
</a>
|
|
</h3>
|
|
</div>
|
|
<div id="pullRequests" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingPR">
|
|
<div class="panel-body p-3">
|
|
<p>
|
|
Yes. In addition to full repositories, Anonymous GitHub supports anonymizing individual pull
|
|
requests. Simply paste the URL of a GitHub pull request when creating a new anonymized repository,
|
|
and the system will automatically detect that it is a pull request and anonymize it accordingly.
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="panel panel-default mb-3">
|
|
<div class="panel-heading p-3" role="tab" id="headingConference">
|
|
<h3 class="panel-title">
|
|
<a class="collapsed" role="button" data-toggle="collapse" data-parent="#faq-features" href="#conference" aria-expanded="false" aria-controls="conference">
|
|
What is the Conference ID feature?
|
|
</a>
|
|
</h3>
|
|
</div>
|
|
<div id="conference" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingConference">
|
|
<div class="panel-body p-3">
|
|
<p>
|
|
When creating an anonymized repository, you can associate it with a Conference ID. This allows
|
|
conferences to define default anonymization settings (such as expiration dates) that are
|
|
automatically applied to repositories submitted under that conference. If your conference
|
|
provides a Conference ID, enter it during the anonymization setup.
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="panel panel-default mb-3">
|
|
<div class="panel-heading p-3" role="tab" id="headingExpiration">
|
|
<h3 class="panel-title">
|
|
<a class="collapsed" role="button" data-toggle="collapse" data-parent="#faq-features" href="#expiration" aria-expanded="false" aria-controls="expiration">
|
|
What happens when an anonymized repository expires?
|
|
</a>
|
|
</h3>
|
|
</div>
|
|
<div id="expiration" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingExpiration">
|
|
<div class="panel-body p-3">
|
|
<p>
|
|
You can configure one of three expiration strategies when creating your anonymized repository:
|
|
</p>
|
|
<ul>
|
|
<li><strong>Never expire</strong> — the anonymized repository remains accessible indefinitely.</li>
|
|
<li><strong>Redirect to GitHub</strong> — after expiration, visitors are redirected to the original GitHub repository.</li>
|
|
<li><strong>Remove content</strong> — after expiration, the anonymized content is deleted from the server.</li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="panel panel-default mb-3">
|
|
<div class="panel-heading p-3" role="tab" id="headingDownload">
|
|
<h3 class="panel-title">
|
|
<a class="collapsed" role="button" data-toggle="collapse" data-parent="#faq-features" href="#download" aria-expanded="false" aria-controls="download">
|
|
Can I download an anonymized repository?
|
|
</a>
|
|
</h3>
|
|
</div>
|
|
<div id="download" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingDownload">
|
|
<div class="panel-body p-3">
|
|
<p>
|
|
Yes. Anonymized repositories can be downloaded as a ZIP file. This is useful if reviewers
|
|
want to build or test the code locally. The downloaded archive contains the fully anonymized
|
|
version of the repository.
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="panel panel-default mb-3">
|
|
<div class="panel-heading p-3" role="tab" id="headingUpdates">
|
|
<h3 class="panel-title">
|
|
<a class="collapsed" role="button" data-toggle="collapse" data-parent="#faq-features" href="#updates" aria-expanded="false" aria-controls="updates">
|
|
Are updates to the original repository reflected in the anonymized version?
|
|
</a>
|
|
</h3>
|
|
</div>
|
|
<div id="updates" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingUpdates">
|
|
<div class="panel-body p-3">
|
|
<p>
|
|
Yes. The anonymized repository tracks the source on GitHub: when you push new commits to the
|
|
original repository, the anonymized view picks up those changes (cached files are refreshed
|
|
against GitHub). This means you can keep iterating on the code while reviewers have the link,
|
|
and you do not need to recreate the anonymized repository every time you update the source.
|
|
</p>
|
|
<p>
|
|
A few practical implications worth keeping in mind:
|
|
</p>
|
|
<ul>
|
|
<li>
|
|
You can safely create the anonymized repository early in the writing process — later
|
|
commits will be visible to reviewers without any additional action.
|
|
</li>
|
|
<li>
|
|
If you rename files, add new identifiers, or introduce new contributor names after creation,
|
|
revisit the anonymization options (custom terms, file filters) to make sure the new content
|
|
is still properly anonymized.
|
|
</li>
|
|
<li>
|
|
If the original repository is made private or deleted, the anonymized repository will no
|
|
longer be able to fetch updated content.
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="panel panel-default mb-3">
|
|
<div class="panel-heading p-3" role="tab" id="headingCLI">
|
|
<h3 class="panel-title">
|
|
<a class="collapsed" role="button" data-toggle="collapse" data-parent="#faq-features" href="#cli" aria-expanded="false" aria-controls="cli">
|
|
Is there a command-line tool?
|
|
</a>
|
|
</h3>
|
|
</div>
|
|
<div id="cli" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingCLI">
|
|
<div class="panel-body p-3">
|
|
<p>
|
|
Yes. Anonymous GitHub provides a CLI tool that lets you anonymize repositories locally,
|
|
generating an anonymized ZIP file on your machine. Install it via npm:
|
|
</p>
|
|
<pre style="background-color: var(--hover-bg-color); padding: 12px; border-radius: 4px; margin-top: 8px; color: var(--color);"><code>npm install -g @tdurieux/anonymous_github
|
|
anonymous_github</code></pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Limitations -->
|
|
<h4 class="faq-cat">
|
|
<i class="fas fa-exclamation-triangle mr-2"></i>Limitations
|
|
</h4>
|
|
<div class="panel-group" id="faq-limitations" role="tablist" aria-multiselectable="true">
|
|
<div class="panel panel-default mb-3">
|
|
<div class="panel-heading p-3" role="tab" id="headingLimitation">
|
|
<h3 class="panel-title">
|
|
<a class="collapsed" role="button" data-toggle="collapse" data-parent="#faq-limitations" href="#limitation" aria-expanded="false" aria-controls="limitation">
|
|
What are the limitations of Anonymous GitHub?
|
|
</a>
|
|
</h3>
|
|
</div>
|
|
<div id="limitation" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingLimitation">
|
|
<div class="panel-body p-3">
|
|
<ul>
|
|
<li>
|
|
Anonymous GitHub only anonymizes text-based files. Binary files (compiled executables,
|
|
archives, etc.) are served as-is without anonymization.
|
|
</li>
|
|
<li>
|
|
Files larger than 8 MB are not supported.
|
|
</li>
|
|
<li>
|
|
Static site generators (such as Jekyll) used with GitHub Pages are not fully supported,
|
|
although Markdown files are converted to HTML.
|
|
</li>
|
|
<li>
|
|
The anonymization of terms within source code may change the behavior of the program
|
|
(e.g., if a replaced term appears in a string literal or identifier).
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Privacy & Security -->
|
|
<h4 class="faq-cat">
|
|
<i class="fas fa-shield-alt mr-2"></i>Privacy & Security
|
|
</h4>
|
|
<div class="panel-group" id="faq-privacy" role="tablist" aria-multiselectable="true">
|
|
<div class="panel panel-default mb-3">
|
|
<div class="panel-heading p-3" role="tab" id="headingData">
|
|
<h3 class="panel-title">
|
|
<a class="collapsed" role="button" data-toggle="collapse" data-parent="#faq-privacy" href="#data" aria-expanded="false" aria-controls="data">
|
|
How is my data handled?
|
|
</a>
|
|
</h3>
|
|
</div>
|
|
<div id="data" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingData">
|
|
<div class="panel-body p-3">
|
|
<p>
|
|
Data stored on Anonymous GitHub is never shared or used for any purpose beyond providing the
|
|
anonymization service. When a repository is removed or expires, only its configuration is
|
|
retained — this makes it easy to restore the repository if needed and ensures that no
|
|
future repository reuses the same ID.
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="panel panel-default mb-3">
|
|
<div class="panel-heading p-3" role="tab" id="headingPermissions">
|
|
<h3 class="panel-title">
|
|
<a class="collapsed" role="button" data-toggle="collapse" data-parent="#faq-privacy" href="#permissions" aria-expanded="false" aria-controls="permissions">
|
|
Why does GitHub say Anonymous GitHub asks for write access?
|
|
</a>
|
|
</h3>
|
|
</div>
|
|
<div id="permissions" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingPermissions">
|
|
<div class="panel-body p-3">
|
|
<p>
|
|
Anonymous GitHub only reads your repositories — it
|
|
never pushes commits, opens issues, modifies settings, or
|
|
deletes anything. From your perspective as a user, the
|
|
service is read-only.
|
|
</p>
|
|
<p>
|
|
However, GitHub's OAuth scopes do not offer a read-only
|
|
option for private repositories: the only scope that grants
|
|
access to private repos is <code>repo</code>, which is
|
|
documented as full read/write access. To support users who
|
|
want to anonymize a private repository, Anonymous GitHub
|
|
must request that scope, and GitHub then displays the
|
|
broader permission text at sign-in. The application itself
|
|
only ever performs read operations against the GitHub API.
|
|
</p>
|
|
<p>
|
|
If you only anonymize public repositories, the source code
|
|
is open and can be audited on the
|
|
<a href="https://github.com/tdurieux/anonymous_github/" target="_blank">GitHub repository</a>,
|
|
or you can self-host your own instance.
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="panel panel-default mb-3">
|
|
<div class="panel-heading p-3" role="tab" id="headingViewer">
|
|
<h3 class="panel-title">
|
|
<a class="collapsed" role="button" data-toggle="collapse" data-parent="#faq-privacy" href="#viewer" aria-expanded="false" aria-controls="viewer">
|
|
Can repository owners see who viewed their anonymized repository?
|
|
</a>
|
|
</h3>
|
|
</div>
|
|
<div id="viewer" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingViewer">
|
|
<div class="panel-body p-3">
|
|
<p>
|
|
No. Only the total number of views is tracked as an incremental counter. It is not possible
|
|
for the repository owner or for Anonymous GitHub to identify individual viewers.
|
|
Reviewer anonymity is fully preserved.
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Self-Hosting -->
|
|
<h4 class="faq-cat">
|
|
<i class="fas fa-server mr-2"></i>Self-Hosting
|
|
</h4>
|
|
<div class="panel-group" id="faq-hosting" role="tablist" aria-multiselectable="true">
|
|
<div class="panel panel-default mb-3">
|
|
<div class="panel-heading p-3" role="tab" id="headingDeploy">
|
|
<h3 class="panel-title">
|
|
<a class="collapsed" role="button" data-toggle="collapse" data-parent="#faq-hosting" href="#deploy" aria-expanded="false" aria-controls="deploy">
|
|
Can I deploy my own instance?
|
|
</a>
|
|
</h3>
|
|
</div>
|
|
<div id="deploy" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingDeploy">
|
|
<div class="panel-body p-3">
|
|
<p>
|
|
Yes. Anonymous GitHub is fully open source (GPL-3.0) and supports Docker-based deployment.
|
|
You will need to configure a GitHub OAuth app and provide a GitHub token. Detailed setup
|
|
instructions are available on the
|
|
<a href="https://github.com/tdurieux/anonymous_github/" target="_blank">GitHub repository</a>.
|
|
</p>
|
|
<p>
|
|
The basic steps are:
|
|
</p>
|
|
<ol>
|
|
<li>Clone the repository and install dependencies</li>
|
|
<li>Create a <code>.env</code> file with your GitHub token, OAuth client ID, and client secret</li>
|
|
<li>Run <code>docker-compose up -d</code></li>
|
|
</ol>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="text-center mt-5 mb-5 p-4" style="background-color: var(--hover-bg-color); border-radius: 8px;">
|
|
<p class="mb-2" style="font-size: 1.1rem;">
|
|
Still have questions?
|
|
</p>
|
|
<p class="text-muted mb-0">
|
|
Open an issue on the
|
|
<a href="https://github.com/tdurieux/anonymous_github/issues" target="_blank">GitHub repository</a>
|
|
and we'll be happy to help.
|
|
</p>
|
|
</div>
|
|
|
|
</div>
|
|
</section>
|
|
</div>
|
|
</div>
|