2017-10-17 139 views
1

我正在嘗試以編程方式將分支合併到使用節點腳本的主分支中。我嘗試的第一件事是從Execute a command line binary with Node.js,它執行終端命令罰款。但是我在修改工作目錄時遇到了困難。我想將工作目錄更改爲git存儲庫,然後從那裏運行git命令。執行cd ~/repocd /home/me/repo根本沒有更改工作目錄,除了使用cd之外,我找不到任何方法來更改它。如何使用標準終端命令從節點執行git命令

我接下來嘗試從腳本目錄執行git命令,但指向我的回購。我試過git --git-dirgit --work-tree,但這些命令都沒有奏效。錯誤是一樣的:fatal: Not a git repository (or any of the parent directories): .git我猜這是因爲腳本運行的目錄不是一個git倉庫。

所以我要麼發送git命令到一個目錄,而不是我正在運行腳本的目錄,或者我想要一種方法來更改腳本的工作目錄。最好是後者。我完整的代碼和輸出低於

import JiraData from './jiradata'; 
const jiraData = new JiraData(); 
const { exec } = require('child_process'); 

(async function() { 
    const cards = await jiraData.getCardsInTest(); 
    let commands = ['cd /home/me/repo', 'pwd']; 
    let proceeding = true; 
    // for (const card of cards) { 
    //  commands.push(`git merge origin/${card} --commit --no-edit`); 
    // } 

    for (const command of commands) { 
     if (proceeding) { 
      console.log(`Executing command "${command}"`); 
      exec(command, (err, stdout, stderr) => { 
       if (err) { 
        proceeding = false; 
        console.log(stderr); 
        return; 
       } 
       console.log(stdout); 
      }) 
     } 
    } 
})(); 

輸出:

> [email protected] start /home/me/CI 
> babel-node index.js --presets es2015,stage-2 

Executing command "cd /home/me/repo" 
Executing command "pwd" 
/home/me/CI 
+0

試試'git --git-dir =/home/me/repo/.git --work-tree =/home/me/repo merge foo'。不要使用'〜'來替換路徑中的'/ home/me'。 – ElpieKay

+0

爲什麼你要這樣做,而不是使用npm git包作爲子進程?使用它時容易一百萬倍... https://www.npmjs.com/package/nodegit – dvsoukup

回答

0

嘗試,而不是用:

git -C /path/to/git/repo your_git_command 

這會在你的混帳回購協議的上下文中執行git的命令/path/to/git/repo

+0

謝謝,我會試試看。我確實已經爲這種情況找到了解決方案,但可能需要簡化它才能使用您的建議。 –

0

我通過使用ShellJS解決了這個問題。 ShellJS有一個方法.cd()它改變目錄,似乎堅持。