2012-01-09 3 views
2

Я пытаюсь написать простой рубиновый скрипт для обновления моих рабочих каталогов GIT. Сценарий создает ошибки, и я не могу понять, почему. У меня есть следующие функции (я знаю, что можно записать более просто, но ничего я стараюсь не похоже на работу)базовый скрипт ruby ​​не работает как ожидалось

def performCommandInDir(command, dir) 
    old_dir = Dir.pwd 
    Dir.chdir(dir) 
    system(command) 
    Dir.chdir(old_dir) 
end 

и я называю это как так

performCommandInDir("git svn rebase", repo[:name]) 

Когда я запускаю сценарий я вижу следующие ошибки:

fatal: /usr/libexec/git-core/git-rebase cannot be used without a working tree. 
rebase refs/remotes/git-svn: command returned error: 1 

Я проверил, что репо [: имя] правильный путь к моему хранилищу GIT. Я могу вручную вставить его значение в оболочку, и команды git работают нормально.

Что может быть здесь?

Спасибо за помощь

+0

Почему бы просто не использовать рубин-мерзавец? https://github.com/schacon/ruby-git – coreyward

ответ

3

Не точный ответ на ваш вопрос, но вы можете передайте --git-dir и --work-tree в команды git, чтобы сообщить, где работать, что может вам помочь.

Я предполагаю, что это не голый репозиторий с момента вашего перебазирования на нем, так это означает, что мерзавец реж в .git:

system("git --git-dir=#{repo[:name]}/.git --work-tree=#{repo[:name]} svn rebase") 
+0

Это, казалось, исправить мои проблемы. Спасибо за помощь. –

0

Вместо того чтобы хранить фактический каталог, изменить его и переключить его обратно с помощью Dir.chdir с блоком:

Dir.chdir(dir) do 
    # your actions 
end 
# back in the original directory 

Ваша ошибка выглядит как проблема Git, не проблема с Ruby. Кажется, вы находитесь в неправильном каталоге.

Вы можете использовать Dir.pwd для проверки рабочего каталога.

-1

Мой способ решения проблемы:

def performCommandInDir(command, dir) 
    system("cd #{dir} && #{command}") 
end 
+0

Какой смысл использовать 'Dir.chdir', если вы также собираетесь делать' cd # {dir} 'в' системном' вызове? –

+0

У меня нет никаких идей, чтобы использовать этот скрипт, но @darren использует некоторые уродливые способы вернуться в старый путь в 2 и 5 строках своего примера. Я думаю, что ты прав, и это не нужно. –

3

Там есть опция ChDir по команде системы - вы можете просто сделать:

def performCommandInDir(command, dir) 
    system(command, :chdir => dir) 
end 
+0

хороший, я не знал об этом втором аргументе. Благодарю. –

Смежные вопросы