Skip to content

devel.git ​

This interface provides access to various git commands. Compared to directly calling git commands, this module provides more high-level and easy-to-use encapsulated interfaces, and provides automatic git detection and cross-platform processing. This is an extension module of xmake.

Tip

To use this module, you need to import it first: import("devel.git")

git.clone ​

  • Clone repository

Function Prototype ​

API

lua
git.clone(url: <string>, opt: <table>)

Parameter Description ​

ParameterDescription
urlRequired. Git repository URL
optOptional. Option parameters, supports the following:
- depth - Shallow clone depth
- branch - Specify branch
- outputdir - Output directory
- recursive - Recursively clone submodules
- longpaths - Enable long path support
- treeless - Use tree filter
- autocrlf - Auto convert line endings
- fsmonitor - Enable filesystem monitoring
- checkout - Whether to perform checkout

Return Value ​

TypeDescription
booleanReturns true on success, false on failure

Usage ​

This interface corresponds to the git clone command, supporting options like shallow cloning, branch selection, and submodule handling.

lua
import("devel.git")

-- Basic clone
git.clone("git@github.com:xmake-io/xmake.git")

-- Clone with options
git.clone("git@github.com:xmake-io/xmake.git", {
    depth = 1,                    -- Shallow clone depth
    branch = "master",            -- Specify branch
    outputdir = "/tmp/xmake",     -- Output directory
    recursive = true,             -- Recursively clone submodules
    longpaths = true,             -- Enable long path support (Windows)
    treeless = true,              -- Use tree filter (Git 2.16+)
    autocrlf = true,              -- Auto convert line endings
    fsmonitor = true,             -- Enable filesystem monitoring
    checkout = false              -- Don't perform checkout
})

git.init ​

  • Initialize git repository

Function Prototype ​

API

lua
git.init(opt: <table>)

Parameter Description ​

ParameterDescription
optOptional. Option parameters, supports the following:
- repodir - Repository directory

Return Value ​

TypeDescription
booleanReturns true on success, false on failure

Usage ​

This interface corresponds to the git init command, used to create a new git repository in the current directory or specified directory.

lua
import("devel.git")

-- Initialize in current directory
git.init()

-- Initialize in specified directory
git.init({repodir = "/tmp/new_project"})

git.pull ​

  • Pull latest commits from remote repository

Function Prototype ​

API

lua
git.pull(opt: <table>)

Parameter Description ​

ParameterDescription
optOptional. Option parameters, supports the following:
- remote - Remote repository name
- branch - Branch name
- tags - Whether to pull tags
- force - Whether to force pull
- repodir - Repository directory
- fsmonitor - Enable filesystem monitoring

Return Value ​

TypeDescription
booleanReturns true on success, false on failure

Usage ​

This interface corresponds to the git pull command, supporting options for specifying remote repository, branch, and tags.

lua
import("devel.git")

-- Basic pull
git.pull()

-- Pull with options
git.pull({
    remote = "origin",            -- Remote repository name
    branch = "master",            -- Branch name
    tags = true,                  -- Pull tags
    force = true,                 -- Force pull
    repodir = "/tmp/xmake",       -- Repository directory
    fsmonitor = true              -- Enable filesystem monitoring
})

git.push ​

  • Push to remote repository

Function Prototype ​

API

lua
git.push(remote: <string>, opt: <table>)

Parameter Description ​

ParameterDescription
remoteRequired. Remote repository URL
optOptional. Option parameters, supports the following:
- branch - Local branch
- remote_branch - Remote branch
- force - Whether to force push
- repodir - Repository directory
- verbose - Whether to output verbosely

Return Value ​

TypeDescription
booleanReturns true on success, false on failure

Usage ​

This interface corresponds to the git push command, supporting force push and specifying remote branches.

lua
import("devel.git")

-- Push to remote repository
git.push("https://github.com/user/repo.git", {
    branch = "master",            -- Local branch
    remote_branch = "main",       -- Remote branch
    force = true,                 -- Force push
    repodir = "/tmp/xmake",       -- Repository directory
    verbose = true                -- Verbose output
})

git.checkout ​

  • Checkout specified branch or commit

Function Prototype ​

API

lua
git.checkout(ref: <string>, opt: <table>)

Parameter Description ​

ParameterDescription
refRequired. Branch name, tag or commit hash
optOptional. Option parameters, supports the following:
- repodir - Repository directory

Return Value ​

TypeDescription
booleanReturns true on success, false on failure

Usage ​

This interface corresponds to the git checkout command, used to switch branches or checkout specific commits.

lua
import("devel.git")

-- Switch to branch
git.checkout("master", {repodir = "/tmp/xmake"})

-- Checkout tag
git.checkout("v1.0.1", {repodir = "/tmp/xmake"})

-- Checkout commit
git.checkout("abc1234", {repodir = "/tmp/xmake"})

git.reset ​

  • Reset repository state

Function Prototype ​

API

lua
git.reset(opt: <table>)

Parameter Description ​

ParameterDescription
optOptional. Option parameters, supports the following:
- repodir - Repository directory
- hard - Whether to hard reset
- soft - Whether to soft reset
- commit - Reset to specified commit

Return Value ​

TypeDescription
booleanReturns true on success, false on failure

Usage ​

This interface corresponds to the git reset command, supporting soft reset, hard reset and other options.

lua
import("devel.git")

-- Basic reset
git.reset({repodir = "/tmp/xmake"})

-- Hard reset to specified commit
git.reset({
    repodir = "/tmp/xmake",
    hard = true,                  -- Hard reset
    commit = "HEAD~1"             -- Reset to previous commit
})

-- Soft reset
git.reset({
    repodir = "/tmp/xmake",
    soft = true,                  -- Soft reset
    commit = "abc1234"            -- Reset to specified commit
})

git.clean ​

  • Clean working directory

Function Prototype ​

API

lua
git.clean(opt: <table>)

Parameter Description ​

ParameterDescription
optOptional. Option parameters, supports the following:
- repodir - Repository directory
- force - Whether to force delete
- all - Whether to delete all untracked files

Return Value ​

TypeDescription
booleanReturns true on success, false on failure

Usage ​

This interface corresponds to the git clean command, used to remove untracked files and directories.

lua
import("devel.git")

-- Basic clean
git.clean({repodir = "/tmp/xmake"})

-- Force clean
git.clean({
    repodir = "/tmp/xmake",
    force = true,                 -- Force delete
    all = true                    -- Delete all untracked files
})

git.apply ​

  • Apply patch file

Function Prototype ​

API

lua
git.apply(patch: <string>, opt: <table>)

Parameter Description ​

ParameterDescription
patchRequired. Patch file path
optOptional. Option parameters, supports the following:
- repodir - Repository directory
- reverse - Whether to apply in reverse
- gitdir - Git directory

Return Value ​

TypeDescription
booleanReturns true on success, false on failure

Usage ​

This interface corresponds to the git apply command, used to apply diff format patch files.

lua
import("devel.git")

-- Apply patch
git.apply("fix.patch", {
    repodir = "/tmp/xmake",
    reverse = true,               -- Apply patch in reverse
    gitdir = ".git"               -- Specify git directory
})

-- Apply diff file
git.apply("changes.diff")

git.branch ​

  • Get current branch name

Function Prototype ​

API

lua
git.branch(opt: <table>)

Parameter Description ​

ParameterDescription
optOptional. Option parameters, supports the following:
- repodir - Repository directory

Return Value ​

TypeDescription
stringReturns current branch name

Usage ​

This interface corresponds to the git branch --show-current command, returns the name of the current branch.

lua
import("devel.git")

-- Get current branch
local branch = git.branch({repodir = "/tmp/xmake"})
print("Current branch:", branch)

git.lastcommit ​

  • Get latest commit hash

Function Prototype ​

API

lua
git.lastcommit(opt: <table>)

Parameter Description ​

ParameterDescription
optOptional. Option parameters, supports the following:
- repodir - Repository directory

Return Value ​

TypeDescription
stringReturns latest commit hash

Usage ​

This interface corresponds to the git rev-parse HEAD command, returns the latest commit hash of the repository.

lua
import("devel.git")

-- Get latest commit hash
local commit = git.lastcommit({repodir = "/tmp/xmake"})
print("Last commit:", commit)

git.refs ​

  • Get all reference list

Function Prototype ​

API

lua
git.refs(url: <string>)

Parameter Description ​

ParameterDescription
urlRequired. Remote repository URL

Return Value ​

TypeDescription
tableReturns reference list array

Usage ​

This interface corresponds to the git ls-remote --refs command, returns all references of the remote repository.

lua
import("devel.git")

-- Get all references
local refs = git.refs("https://github.com/xmake-io/xmake.git")
for _, ref in ipairs(refs) do
    print("Ref:", ref)
end

git.tags ​

  • Get all tag list

Function Prototype ​

API

lua
git.tags(url: <string>)

Parameter Description ​

ParameterDescription
urlRequired. Remote repository URL

Return Value ​

TypeDescription
tableReturns tag list array

Usage ​

This interface corresponds to the git ls-remote --tags command, returns all tags of the remote repository.

lua
import("devel.git")

-- Get all tags
local tags = git.tags("https://github.com/xmake-io/xmake.git")
for _, tag in ipairs(tags) do
    print("Tag:", tag)
end

git.branches ​

  • Get all branch list

Function Prototype ​

API

lua
git.branches(url: <string>)

Parameter Description ​

ParameterDescription
urlRequired. Remote repository URL

Return Value ​

TypeDescription
tableReturns branch list array

Usage ​

This interface corresponds to the git ls-remote --heads command, returns all branches of the remote repository.

lua
import("devel.git")

-- Get all branches
local branches = git.branches("https://github.com/xmake-io/xmake.git")
for _, branch in ipairs(branches) do
    print("Branch:", branch)
end

git.ls_remote ​

  • Get remote reference information

Function Prototype ​

API

lua
git.ls_remote(refs: <string>, url: <string>)

Parameter Description ​

ParameterDescription
refsRequired. Reference type, e.g., "tags", "heads", "refs"
urlRequired. Remote repository URL

Return Value ​

TypeDescription
tableReturns reference list array

Usage ​

This interface corresponds to the git ls-remote command, supports getting tags, branches or all references.

lua
import("devel.git")

-- Get tags
local tags = git.ls_remote("tags", "https://github.com/xmake-io/xmake.git")

-- Get branches
local heads = git.ls_remote("heads", "https://github.com/xmake-io/xmake.git")

-- Get all references
local refs = git.ls_remote("refs")

git.checkurl ​

  • Check if it's a git URL

Function Prototype ​

API

lua
git.checkurl(url: <string>)

Parameter Description ​

ParameterDescription
urlRequired. URL to check

Return Value ​

TypeDescription
booleanReturns true if it's a git URL, false otherwise

Usage ​

Check if the given URL is a valid git repository address.

lua
import("devel.git")

-- Check URL
local is_git = git.checkurl("https://github.com/xmake-io/xmake.git")
if is_git then
    print("This is a git URL")
end

git.asgiturl ​

  • Convert URL to git format

Function Prototype ​

API

lua
git.asgiturl(url: <string>)

Parameter Description ​

ParameterDescription
urlRequired. URL to convert

Return Value ​

TypeDescription
stringReturns standard git URL format

Usage ​

Convert various formats of URLs to standard git URL format, supporting custom protocols.

lua
import("devel.git")

-- Convert URL to git format
local git_url = git.asgiturl("github:xmake-io/xmake")
print("Git URL:", git_url)  -- https://github.com/xmake-io/xmake.git

-- Supported custom protocols
local protocols = {
    "github:user/repo",      -- https://github.com/user/repo.git
    "gitlab:user/repo",      -- https://gitlab.com/user/repo.git
    "gitee:user/repo",       -- https://gitee.com/user/repo.git
    "bitbucket:user/repo"    -- https://bitbucket.org/user/repo.git
}

submodule.update ​

  • Update submodules

Function Prototype ​

API

lua
submodule.update(opt: <table>)

Parameter Description ​

ParameterDescription
optOptional. Option parameters, supports the following:
- repodir - Repository directory
- init - Whether to initialize submodules
- remote - Whether to update remote information
- recursive - Whether to recursively update
- force - Whether to force update
- checkout - Whether to checkout submodules
- merge - Whether to merge mode
- rebase - Whether to rebase mode
- reference - Reference repository
- paths - Specify submodule paths
- longpaths - Enable long path support

Return Value ​

TypeDescription
booleanReturns true on success, false on failure

Usage ​

This interface corresponds to the git submodule update command, used to update repository submodules.

lua
import("devel.git.submodule")

-- Basic update
submodule.update({repodir = "/tmp/xmake"})

-- Update with options
submodule.update({
    repodir = "/tmp/xmake",
    init = true,                 -- Initialize submodules
    remote = true,               -- Update remote information
    recursive = true,            -- Recursive update
    force = true,                -- Force update
    checkout = true,             -- Checkout submodules
    merge = true,                -- Merge mode
    rebase = true,               -- Rebase mode
    reference = "/path/to/repo", -- Reference repository
    paths = {"submodule1", "submodule2"}, -- Specify submodule paths
    longpaths = true             -- Enable long path support
})

submodule.clean ​

  • Clean submodules

Function Prototype ​

API

lua
submodule.clean(opt: <table>)

Parameter Description ​

ParameterDescription
optOptional. Option parameters, supports the following:
- repodir - Repository directory
- force - Whether to force delete
- all - Whether to delete all untracked files

Return Value ​

TypeDescription
booleanReturns true on success, false on failure

Usage ​

This interface corresponds to the git submodule foreach git clean command, used to clean untracked files in all submodules.

lua
import("devel.git.submodule")

-- Basic clean
submodule.clean({repodir = "/tmp/xmake"})

-- Force clean
submodule.clean({
    repodir = "/tmp/xmake",
    force = true,                 -- Force delete
    all = true                    -- Delete all untracked files
})

submodule.reset ​

  • Reset submodules

Function Prototype ​

API

lua
submodule.reset(opt: <table>)

Parameter Description ​

ParameterDescription
optOptional. Option parameters, supports the following:
- repodir - Repository directory
- hard - Whether to hard reset
- soft - Whether to soft reset
- commit - Reset to specified commit
- longpaths - Enable long path support

Return Value ​

TypeDescription
booleanReturns true on success, false on failure

Usage ​

This interface corresponds to the git submodule foreach git reset command, used to reset the state of all submodules.

lua
import("devel.git.submodule")

-- Basic reset
submodule.reset({repodir = "/tmp/xmake"})

-- Hard reset
submodule.reset({
    repodir = "/tmp/xmake",
    hard = true,                  -- Hard reset
    commit = "HEAD"               -- Reset to specified commit
})

-- Soft reset
submodule.reset({
    repodir = "/tmp/xmake",
    soft = true,                  -- Soft reset
    longpaths = true              -- Enable long path support
})