簡體   English   中英

Git使用腳本拉多個本地存儲庫(紅寶石?)

[英]Git pull multiple local repositories with script (ruby?)

我從github克隆了大約30個git存儲庫,用於Web / ruby​​ / javascript開發。 是否可以使用腳本批量更新所有這些腳本?

我的一切都井井有條(文件夾結構):

- Workspace
  - Android
  - Chrome
  - GitClones
    - Bootstrap
    ~ etc...30 some repositories
  - iPhone
  - osx
  - WebDev

我有一個ruby腳本來使用octokit克隆存儲庫,但是在GitClones下的所有存儲庫中,如何進行git pull(覆蓋/重新本地化)有什么建議嗎?

通常,只要要使用該存儲庫,我都會進行拉動,但是我要去的地方有時只能使用Internet連接。 因此,我想在擁有互聯網的情況下盡一切可能進行更新。

謝謝! (正在運行osx 10.8.2)

如果您必須在Ruby中執行此操作,則可以使用以下快速且骯臟的腳本:

#!/usr/bin/env ruby

Dir.entries('./').select do |entry|
  next if %w{. .. ,,}.include? entry
  if File.directory? File.join('./', entry)
    cmd = "cd #{entry} && git pull"
    `#{cmd}`
  end
end

不要忘記將文件復制到chmod + x並確保它位於GitClones目錄中。

可以,但是當外殼足夠時為什么要使用紅寶石呢?

function update_all() {
  for dir in GitClones/*; do 
    cd "$dir" && git pull
  done
}

將球的開頭更改為口味。 這做了兩件事:

  1. 僅當包含.git子目錄時才進行git pull
  2. 由於沒有人使用以點開頭的git repos,所以它跳過點(。)目錄。

請享用

# Assumes run from Workspace
Dir['GitClones/[^.]*'].select {|e| File.directory? e }.each do |e|
  Dir.chdir(e) { `git pull` } if File.exist? File.join(e, '.git')
end

進行了修訂,以提供更好的輸出並與操作系統無關。 這將清除本地更改,並更新代碼。

#!/usr/bin/env ruby

require 'pp'

# no stdout buffering
STDOUT.sync = true

# checks for windows/unix for chaining commands
OS_COMMAND_CHAIN = RUBY_PLATFORM =~ /mswin|mingw|cygwin/ ? "&" : ";"

Dir.entries('.').select do |entry|
  next if %w{. .. ,,}.include? entry
  if File.directory? File.join('.', entry)
    if File.directory? File.join('.', entry, '.git')
      full_path = "#{Dir.pwd}/#{entry}"
      git_dir = "--git-dir=#{full_path}/.git --work-tree=#{full_path}"
      puts "\nUPDATING '#{full_path}' \n\n"
      puts `git #{git_dir} clean -f #{OS_COMMAND_CHAIN} git #{git_dir} checkout . #{OS_COMMAND_CHAIN} git #{git_dir} pull` 
    end
  end
end

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM