#!/usr/bin/env bash # # Initialize a GIT repository. # Copyright (c) Petr Baudis, 2005 # # `cg-init` called in a non-empty directory will automatically add its contents # in the initial commit. (Please note that certain default ignore rules are # applied during this operation. If any files were not added due to this, # cg-init will advise you what to do.) # # This command is intended for creating repositories for work on new projects. # If you want to clone an existing project, see `cg-clone`. If you want to # set up a public repository not for direct work but only for pushing/pulling, # see `cg-admin-setuprepo`. It is also possible to import repositories from # other SCMs to GIT, see `git-cvsimport(1)`, `git-svnimport(1)` and # `git-archimport(1)`. # # OPTIONS # ------- # -e EXCLUDEPATTERN:: Ignore files matching EXCLUDEPATTERN # Ignore files matching this pattern when importing files for the # initial commit. Note that if you are importing any .gitignore # files, they will be considered as well. If you want to make # en even more custom choice of files to be imported, use the -I # parameter and add and perform the initial commit manually. # # -I:: No initial commit # Do not perform the initial commit. You can perform the initial commit # manually later, but you will need to pass cg-commit the -C parameter. # # -m MESSAGE:: Specify initial commit message # Specify the commit message for the initial commit. See `cg-commit` # documentation for details. # # -N:: Only update the cache # Only update the cache: do not copy the data into the object database. # This is for special purposes when you might not actually _have_ any # object database. This option is normally not interesting. USAGE="cg-init [-I] [-N] [-e EXCLUDEPATTERN]... [-m MESSAGE]..." _git_repo_unneeded=1 . "${COGITO_LIB}"cg-Xlib || exit 1 excludes=() no_initial_commit= commitargs=() infoonly= while optparse; do if optparse -e=; then excludes[${#excludes[@]}]="$OPTARG" elif optparse -I; then no_initial_commit=1 elif optparse -m=; then commitargs[${#commitargs[@]}]="-m" commitargs[${#commitargs[@]}]="$OPTARG" elif optparse -N; then infoonly=-N else optfail fi done [ "${commitargs[*]}" ] || commitargs=(-m "Initial commit" -E) [ -e "$_git" ] && die "$_git already exists" cleanup_trap "rm -rf $_git" git-init-db git-read-tree # Seed the dircache if ! [ "$no_initial_commit" ]; then [ "$(ls)" ] && list_untracked_files exclude nosquashdirs "${excludes[@]}" | xargs -0 cg-add ${infoonly} cg-commit -C "${commitargs[@]}" ${infoonly} fi if [ "$(cg-status -nwx)" ]; then echo "cg-init: Note that some files were not added due to the default ignore rules." >&2 echo "cg-init: You can list them by invoking 'cg-status -x'." >&2 fi exit 0