grunt-git

Git commands for grunt.

grunt-git

Git commands for grunt.

This plugin requires Grunt ~0.4.0

If you haven't used Grunt before, be sure to check out the Getting Started guide, as it explains how to create a Gruntfile as well as install and use Grunt plugins. Once you're familiar with that process, you may install this plugin with this command:

npm install grunt-git --save-dev

Once the plugin has been installed, it may be enabled inside your Gruntfile with this line of JavaScript:

grunt.loadNpmTasks('grunt-git');

The gitcommit command used to call git add for you. This is no longer the case. Be sure to add a gitadd task whenever there might be new files to commit. The ignoreEmpty option is no longer supported.

The following options may be applied to any task

Type: boolean Default value: none

Console output from the git task will be piped to the output of the grunt script. Useful for debugging.

Type: string Default value: none

Change the current working directory before executing the git call. Useful for performing operations on repositories that are located in subdirectories. Note: When performing commands that provide files (e.g. gitcommit), it is also necessary to specify the cwd for the files explicitly.

grunt.initConfig({
  gitcommit: {
    your_target: {
      options: {
        cwd: "/path/to/repo"
      },
      files: [
        {
          src: ["fileone.txt", "filetwo.js"],
          expand: true,
          cwd: "/path/to/repo"
        }
      ]
    }
  },
})

Add file contents to the index

Type: Boolean Default value: false

Update the index not only where the working tree has a file matching but also where the index already has an entry. This adds, modifies, and removes index entries to match the working tree.

Type: Boolean Default value: false

Allow adding otherwise ignored files.

grunt.initConfig({
  gitadd: {
    task: {
      options: {
        force: true
      },
      files: {
        src: ['test.txt']
      }
    }
  },
});

Commits the working directory.

In your project's Gruntfile, add a section named gitcommit to the data object passed into grunt.initConfig().

grunt.initConfig({
  gitcommit: {
    your_target: {
      options: {
        // Target-specific options go here. 
      },
      files: {
          // Specify the files you want to commit 
      }
    }
  },
})

Each target defines a specific git task that can be run. The different available tasks are listed below.

Type: String Default value: 'Commit'

The commit message.

Type: Boolean Default value: false

When true, the task will not fail when there are no staged changes (optional).

Type: Boolean Default value: false

When true, the task will commit the changes with the --no-verify flag.

Type: Boolean Default value: false

When true, the task will commit the changes with the --no-status flag.

Commit options:

  • message: Commit message
  • files: Files to commit
  • noVerify: Bypass the pre-commit and commit-msg hooks when committing changes
  • noStatus: Do not include the output of git-status in the commit message
grunt.initConfig({
    gitcommit: {
        task: {
            options: {
                message: 'Testing',
                noVerify: true,
                noStatus: false
            },
            files: {
                src: ['test.txt']
            }
        }
    },
});

Rebases the current branch onto another branch

Type: String the name of the branch you want to rebase on to. For example if the current branch were codfish and you wanted to rebase it onto master, you would set this value to master.

Type: Boolean Default value: false

When true, use the git equivalent of svn's theirs-conflict (--strategy=recursive -Xtheirs).

grunt.initConfig({
  gitrebase: {
    task: {
      options: {
        branch: 'master'
      }
    }
  },
});

Creates (or deletes) a git tag.

In your project's Gruntfile, add a section named gittag to the data object passed into grunt.initConfig().

grunt.initConfig({
  gittag: {
    your_target: {
      options: {
        // Target-specific options go here. 
      }
    }
  },
})

Each target defines a specific git task that can be run. The different available tasks are listed below.

Type: String Default value: ''

The name of the tag. E.g.: 0.0.1.

Type: String Default value: ''

The tag message (optional).

Type: Boolean Default value: false

Whether to delete the tag (optional).

Type: Boolean Default value: false

Whether to create an annotated tag (optional).

Type: Boolean Default value: false

Whether to force to create or update the tag (optional).

grunt.initConfig({
    gittag: {
        addtag: {
            options: {
                tag: '0.0.1',
                message: 'Testing'
            }
        },
        deletetag: {
            options: {
                tag: '0.0.1',
                remove: true
            }
        }
    },
});

Creates a git branch using checkout -b, or checks out a given branch.

In your project's Gruntfile, add a section named gitcheckout to the data object passed into grunt.initConfig().

grunt.initConfig({
  gitcheckout: {
    your_target: {
      options: {
        // Target-specific options go here. 
      }
    }
  },
})

Each target defines a specific git task that can be run. The different available tasks are listed below.

Type: String Default value: ''

The name of the branch. E.g.: testing.

Type: Boolean Default value: false

Whether the branch should be created (optional).

Type: Boolean Default value: false

Whether the checkout should be forced in the case of git errors (optional)

Type: Boolean Default value: false

Whether the branch should be overwritten, or created if it doesn't already exist (optional).

NOTE: When enabled, this option overwrites the target branch with the current branch.

grunt.initConfig({
    gitcheckout: {
        task: {
            options: {
                branch: 'testing',
                create: true
            }
        }
    },
});

Stash the changes in a dirty working directory away.

In your project's Gruntfile, add a section named gitstash to the data object passed into grunt.initConfig().

grunt.initConfig({
  gitstash: {
    your_target: {
      options: {
        // Target-specific options go here. 
      }
    }
  },
})

Each target defines a specific git task that can be run. The different available tasks are listed below.

Type: String Default value: 'save'

The stash command to run. E.g.: save, apply.

Type: Integer Default value: ''

The stash to apply. E.g.: 0 (optional).

Type: Boolean Default value: false

Whether the staged changes should be reapplied (optional).

grunt.initConfig({
    gittag: {
        stash: {
            options: {
                create: true
            }
        },
        apply: {
            options: {
                command: 'apply',
                staged: true,
                stash: '0'
            }
        }
    },
});

Clones a git repo.

In your project's Gruntfile, add a section named gitclone to the data object passed into grunt.initConfig().

grunt.initConfig({
  gitclone: {
    your_target: {
      options: {
        // Target-specific options go here. 
      }
    }
  },
})

Each target defines a specific git task that can be run. The different available tasks are listed below.

Type: Boolean Default value: none

Run git clone with the --bare option applied.

Type: String Default value: none

Clone the repo with a specific branch checked out. (Cannot be used in conjunction with 'bare')

Type: Integer Default value: none

Clone the repo with a limited revision history. (Such clones cannot be pushed from or pulled to.)

Type: String Default value: none

The path to the repository you want to clone.

Type: String Default value: none

Clone the repo into a specific directory instead of the one git decides.

Type: boolean Default value: none

Pass the --recursive flag to the git clone command. This is equivalent to running git submodule update --init --recursive immediately after the clone is finished.

grunt.initConfig({
    gitclone: {
        clone: {
            options: {
                repository: 'https://github.com/you/your-git-repo.git',
                branch: 'my-branch',
                directory: 'repo'
            }
        }
    },
});

Creates a git branch using checkout -b, or checks out a given branch.

In your project's Gruntfile, add a section named gitreset to the data object passed into grunt.initConfig().

grunt.initConfig({
  gitreset: {
    your_target: {
      options: {
        // Target-specific options go here. 
      },
      files: {
        src: // Target-specific files go here. 
      }
    }
  },
})

Each target defines a specific git task that can be run. The different available tasks are listed below.

Type: String Default value: ''

The reset mode to run. E.g.: hard, merge.

Type: String Default value: 'HEAD'

Which commit to reset to (optional).

grunt.initConfig({
    gitreset: {
        task: {
            options: {
                mode: 'hard',
                commit: 'HEAD~1'
            }
        }
    },
});

Removes files from git's working tree and index.

In your project's Gruntfile, add a section named gitrm to the data object passed into grunt.initConfig().

grunt.initConfig({
  gitrm: {
    your_target: {
      options: {
        // Target-specific options go here. 
      },
      files: {
        src: // Target-specific files go here. 
      }
    }
  },
})

Each target defines a specific git task that can be run. The different available tasks are listed below.

Type: boolean Default value: false

Will force a removal of the files listed in the configuration.

Type: boolean Default value: false

Will recurse into subdirectories if specified in the configuration.

grunt.initConfig({
    gitrm: {
        task: {
            options: {
                force: 'true'
            },
            files: {
                src: ['dist/test.min.js']
            }
        }
    },
});

Remove untracked files from the working tree.

In your project's Gruntfile, add a section named gitclean to the data object passed into grunt.initConfig().

grunt.initConfig({
  gitclean: {
    your_target: {
      options: {
        // Target-specific options go here. 
      },
      files: {
        src: // Target-specific paths go here (optional). 
      }
    }
  },
})

Type: Boolean Default value: true

Force a run of the clean command (optional).

Type: Boolean Default value: false

Don't actually remove anything, just show what would be done (optional).

Type: Boolean Default value: false

Be quiet, only report errors, but not the files that are successfully removed (optional).

Type: String Default value: false

In addition to those found in .gitignore (per directory) and $GIT_DIR/info/exclude, also consider the given patterns to be in the set of the ignore rules in effect (optional).

Type: Boolean Default value: false

Remove only files ignored by Git. This may be useful to rebuild everything from scratch, but keep manually created files (optional).

Type: Boolean Default value: false

Don't use the standard ignore rules read from .gitignore (per directory) and $GIT_DIR/info/exclude, but do still use the ignore rules given with this option. This allows removing all untracked files, including build products. This can be used (possibly in conjunction with git reset) to create a pristine working directory to test a clean build (optional).

Type: Boolean Default value: false

Remove untracked directories in addition to untracked files. If an untracked directory is managed by a different Git repository, it is not removed by default (optional).

Pushes to a remote.

In your project's Gruntfile, add a section named gitpush to the data object passed into grunt.initConfig().

grunt.initConfig({
  gitpush: {
    your_target: {
      options: {
        // Target-specific options go here. 
      }
    }
  },
})

Type: String Default value: 'origin'

The remote where to push. E.g.: origin, heroku. The task will push to origin if left unset.

Type: String Default value: null

The remote branch to push to. E.g.: master, develop. The task will push to the tracked branch if left unset.

Type: Boolean Default value: false

Will add the --all flag to the push.

Type: Boolean Default value: false

Will add the --tags flag to the push.

Type: Boolean Default value: false

Will add the --set-upstream flag to the push.

Type: Boolean Default value: false

Will add the --force flag to the push.

Pulls from a remote.

In your project's Gruntfile, add a section named gitpull to the data object passed into grunt.initConfig(). You can change the remote (origin is by default), and you can add a branch you want to pull from.

grunt.initConfig({
  gitpull: {
    your_target: {
      options: {
 
      }
    }
  },
})

Type: String Default value: origin

The remote to pull from. The task will not fail if the origin is left unset and pull the default remote git origin.

Type: String Default value: master

The branch to pull from. E.g.: master, develop (optional).

Download objects and refs from a repo.

In your project's Gruntfile, add a section named gitfetch to the data object passed into grunt.initConfig().

grunt.initConfig({
  gitfetch: {
    your_target: {
      options: {
        all: true
      }
    }
  }
})

Type: String Default value: null

The repository you want to fetch from. When no remote is specified, by default the origin remote will be used.

Type: Boolean Default value: false

Adds the --all flag. Fetch all remotes.

Type: Boolean Default value: false

Adds the --append flag. Append ref names and object names of fetched refs.

Type: Boolean Default value: false

Adds the --prune flag. After fetching, remove any remote-tracking references that no longer exist on the remote.

Type: Boolean Default value: false

Adds the --no-tags flag. Disables automatic tag following.

Type: Boolean Default value: false

Adds the --tags flag. Fetch all tags from the remote into local.

Merges another branch into the current branch.

In your project's Gruntfile, add a section named gitmerge to the data object passed into grunt.initConfig().

grunt.initConfig({
  gitmerge: {
    your_target: {
      options: {
        // Target-specific options go here. 
      }
    }
  },
})

Type: String Default value: null

The branch to merge from. E.g.: master, develop. The task will fail if the branch if left unset.

Type: Boolean Default value: false

Will add the --ff-only flag to the merge.

Type: Boolean Default value: false

Will add the --no-ff flag to the merge.

Type: Boolean Default value: false

Will add the --squash flag to the merge.

Type: Boolean Default value: false

Will add the --edit flag to the merge: this forces an editor to appear before committing the successful merge.

Type: Boolean Default value: false

Will add the --no-edit flag to the merge: this bypasses the editor from appearing before committing a successful merge.

Type: String Default value: null

Will add the -m flag followed by the value of this option to the merge: this string will be used as the commit message for the merge.

Type: Boolean Default value: false

Will add the --commit flag to the merge: this option can be used to override -no-commit in the git config.

Type: Boolean Default value: false

Will add the --no-commit flag to the merge: do not commit the merge.

Type: String Default value: null

Will add the -s flag followed by the value of this option to the merge: this string will be used to specify the strategy for the merge.

Type: String Default value: null

Will add the -X flag followed by the value of this option to the merge: this string will be used to specify a strategy-specific option for the merge.

Archives a branch.

In your project's Gruntfile, add a section named gitarchive to the data object passed into grunt.initConfig().

grunt.initConfig({
  gitarchive: {
    master: {
      options: {
        format: 'tar.gz',
        prefix: 'your-project-name/',
        treeIsh: 'master',
        output: '/tmp/your-project-name.tar.gz',
        path: ['README', 'LICENSE']
      }
    }
  }
})

Type: String Default value: 'master'.

The tree or commit to produce an archive for. E.g.: 'master' or a commit hash.

Type: String Default value: 'tar'.

Format of the resulting archive: 'tar', 'tar.gz', 'zip'. If this option is not given, and the output file is specified, the format is inferred from the filename if possible (e.g. writing to "foo.zip" makes the output to be in the zip format). Otherwise the output format is tar.

Type: String Default value: none.

Adds the --prefix flag. Don't forget the trailing /.

Type: String Default value: none.

Adds the --output flag. Write the archive to a file instead of stdout.

Type: String Default value: none.

Adds the --remote flag. Instead of making a tar archive from the local repository, retrieve a tar archive from a remote repository.

Type: Array Default value: none.

Without an optional path parameter, all files and subdirectories of the current working directory are included in the archive. If one or more paths are specified, only these are included.

Logs commit history and stores the result in a grunt property or calls a callback function with the result. The result is an array of objects with the following properties:

  • hash - the commit hash
  • author - an object with name and email properties
  • date - the date of the commit
  • subject - the subject string of the commit
  • body - the body string of the commit

In your project's Gruntfile, add a section named gitlog to the data object passed into grunt.initConfig().

grunt.initConfig({
  gitlog: {
    mytarget: {
      options: {
        prop: 'gitlog.mytarget.result',
        from: 'v0.2.0',
        to: 'v0.2.2'
      }
    }
  }
})

Type: String Default value: 'gitlog.<target name>.result'.

The grunt property in which to store the results.

Type: Function Default value: none.

A callback function to call with the log results.

Type: String Default value:

    'format:' + 
    '{%n' +
    '  "hash": "%H",%n' + // commit hash
    '  "author": {%n' +
    '    "name": "%an",%n' + // author
    '    "email": "%ae"%n' + // email
    '  },%n' +
    '  "date": "%aD",%n' + // date
    '  "subject": "%s",%n' + // subject
    '  "body": "%b"%n' + // body
    '}%n' +
    '--grunt-gitlog-separator--' // separator

The format for the log output

Type: Int Default value: none.

The number of logs entries to export

Type: String Default value: none.

A commit hash, tag, etc to start from.

Type: String Default value: none.

A commit hash, tag, etc to end at. Defaults to 'HEAD' if from is specified.

Type: Boolean Default value: none.

Whether to order by date. Defaults to true when options.after or options.before are specified.

Type: Date Default value: none.

A date to start from. Causes options.dateOrder to be true

Type: Date Default value: none.

A date to stop at. Causes options.dateOrder to be true

Type: boolean Default value: true.

Whether or not to include merges in the logs.

In lieu of a formal styleguide, take care to maintain the existing coding style. Add unit tests for any new or changed functionality. Lint and test your code using Grunt.