nodejs shallow git 克隆使用简单-git
nodejs shallow git clone using simple-git
我正在尝试使用 simple-git 创建浅层克隆。我正在尝试创建与此命令等效的命令:git clone --depth 1 https://github.com/steveukx/git-js.git
。我的代码如下:
const git = require('simple-git')()
const repoURL = 'https://github.com/steveukx/git-js.git';
const localPath= './git-js';
const options = ['--depth', '1'];
const handlerFn = () => {
console.log('DONE')
};
git.clone(repoURL, localPath, options, handlerFn());
我在 options
中指定了 --depth 1
,但是代码复制了整个 repo 历史记录,它似乎完全忽略了给定的选项。我这样做是否正确,是什么导致了这种行为?
经过一番挖掘,问题出在 git.clone(repoURL, localPath, options, handlerFn());
,您必须将引用传递给函数而不是实际的回调,就像这样 git.clone(repoURL, localPath, options, handlerFn);
。
完整的实现如下:
const git = require('simple-git')();
const fs = require('fs')
const url = require('url');
this.gitURL = 'https://github.com/torvalds/linux.git';
const localURL = url.parse(this.gitURL);
const localRepoName = (localURL.hostname + localURL.path)
.replace('com', '')
.replace('/', '')
.replace('/', '.')
.replace('.git', '')
this.localPath = `./${localRepoName}`;
this.options = ['--depth', '1'];
this.callback = () => {
console.log('DONE')
}
if (fs.existsSync(this.localPath)) {
// something
} else {
git.outputHandler((command, stdout, stderr) => {
stdout.pipe(process.stdout);
stderr.pipe(process.stderr)
stdout.on('data', (data) => {
// Print data
console.log(data.toString('utf8'))
})
})
.clone(this.gitURL, this.localPath, this.options, this.callback)
}
我正在尝试使用 simple-git 创建浅层克隆。我正在尝试创建与此命令等效的命令:git clone --depth 1 https://github.com/steveukx/git-js.git
。我的代码如下:
const git = require('simple-git')()
const repoURL = 'https://github.com/steveukx/git-js.git';
const localPath= './git-js';
const options = ['--depth', '1'];
const handlerFn = () => {
console.log('DONE')
};
git.clone(repoURL, localPath, options, handlerFn());
我在 options
中指定了 --depth 1
,但是代码复制了整个 repo 历史记录,它似乎完全忽略了给定的选项。我这样做是否正确,是什么导致了这种行为?
经过一番挖掘,问题出在 git.clone(repoURL, localPath, options, handlerFn());
,您必须将引用传递给函数而不是实际的回调,就像这样 git.clone(repoURL, localPath, options, handlerFn);
。
完整的实现如下:
const git = require('simple-git')();
const fs = require('fs')
const url = require('url');
this.gitURL = 'https://github.com/torvalds/linux.git';
const localURL = url.parse(this.gitURL);
const localRepoName = (localURL.hostname + localURL.path)
.replace('com', '')
.replace('/', '')
.replace('/', '.')
.replace('.git', '')
this.localPath = `./${localRepoName}`;
this.options = ['--depth', '1'];
this.callback = () => {
console.log('DONE')
}
if (fs.existsSync(this.localPath)) {
// something
} else {
git.outputHandler((command, stdout, stderr) => {
stdout.pipe(process.stdout);
stderr.pipe(process.stderr)
stdout.on('data', (data) => {
// Print data
console.log(data.toString('utf8'))
})
})
.clone(this.gitURL, this.localPath, this.options, this.callback)
}