4 releases (2 breaking)
new 0.3.1 | Dec 29, 2024 |
---|---|
0.3.0 | Dec 24, 2024 |
0.2.0 | Dec 13, 2024 |
0.1.0 | Dec 9, 2024 |
#263 in Command line utilities
503 downloads per month
25KB
321 lines
Gitignore to Megaignore converter
This is a simple tool to convert a .gitignore
file to a .megaignore
file. The .megaignore
file is used by the Mega cloud storage service to exclude files from being uploaded to the cloud much like the .gitignore
file is used to exclude files from being tracked by git.
You can read more about the .megaignore
file format here.
The changelog is available here.
Installation
Cargo
Make sure you have Rust installed.
You can then install git2megaignore using cargo:
cargo install git2megaignore
Precompiled binaries
If you don't have Rust installed, you can download precompiled binaries from the releases page.
Usage example
# go to a directory with a .gitignore file
$ cd example
# or create a new .gitignore file
$ echo "*.txt
foo/
/[Bb]uild/
src/**/index.js
\!src/index.js" > .gitignore
# convert the .gitignore file to a .megaignore file
$ git2megaignore -em
resulting .megaignore
file:
sync:.megaignore
-nG:*.txt
-dnG:foo
-dpR:^[Bb]uild$
-pR:^src/(.*/)?index\.js$
pG:src/index.js
sync:.megaignore
is a special rule that tells Mega to sync the.megaignore
file itself, this was added with the-m
option-
prefix means that the rule is an exclude rulen
option means that the rule should be applied to the file name, not the whole pathp
option means that the rule should be applied to the path of the file, not the file named
option means that the rule targets directories only, otherwise it targets everythingG
option means that the rule is a case-sensitive glob patternR
option means that the rule is a case-sensitive regex pattern- for more information about the rule format, see the Mega help page
Other usage examples
# take input from stdin and write to stdout
# -e, --no-extras do not add extra header and footer lines
# -p, --print print to stdout
# -v, --verbose <VERBOSE> set verbosity level (0-4)
$ echo "foo/**/bar" | git2megaignore -ep -v=0
-pR:^foo/(.*/)?bar$
# copy .gitignore lines when converting to .megaignore
# -c --copy copy .gitignore lines to the .megaignore file
$ echo "/[Ll]ibrary/" | git2megaignore -c -ep -v=0
# from /[Ll]ibrary/
-dpR:^[Ll]ibrary$
# run from other directory
# this will read the .gitignore file from the specified directory
# and write the .megaignore file to the same directory
git2megaignore ~/path/to/repo
# specify input and output files explicitly
git2megaignore -i ../.gitignore -o /tmp/.megaignore
Options
Convert a .gitignore file to a .megaignore file
Usage: git2megaignore [OPTIONS] [DIRECTORY]
Arguments:
[DIRECTORY] directory to start searching for .gitignore files [default: ]
Options:
-m, --sync-megaignore sync the .megaignore file with the sync:.megaignore rule
-c, --copy If `true`, every .gitignore line will be copied to the .megaignore file as **a comment**
-e, --no-extras the header and footer will not be added to the .megaignore file
-x, --force-regexp Force the use of the Regex <STRATEGY> for all rules, even if the glob pattern does not require it
-I, --ignore-case .megaignore rules will be case insensitive
-i, --input <FILE> Input file to read .gitignore rules from, defaults to .gitignore in the current directory
-o, --output <FILE> Output file to write .megaignore rules to, defaults to .megaignore in the current directory
-p, --print print the generated .megaignore file to STDOUT
-v, --verbose <VERBOSE> Set the level of verbosity from 0 (off) to 4 (debug) [default: 2]
-h, --help Print help
-V, --version Print version
Mass conversion
you can run the following bash script to convert all .gitignore
files in the subdirectories of the current directory to .megaignore
files:
find . -name .gitignore -execdir git2megaignore \;
for windows, you can use the following powershell script:
Get-ChildItem -Recurse -Filter .gitignore | ForEach-Object { git2megaignore $_.DirectoryName }
Dependencies
~1.3–2.2MB
~38K SLoC