1

Web/Ruby/javascript 開発に使用する github から複製された 30 個までの git リポジトリがあります。それらすべてをスクリプトで一括更新することは可能ですか?

私はすべてをかなり整理しています(フォルダ構造):

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

でリポジトリをクローンする Ruby スクリプトoctokitがありますが、 の下のすべてのリポジトリで git pull (ローカルの上書き/リベース) を実行する方法について何か提案はありますGitClonesか?

通常、そのレポを使用しようとするときはいつでもプルを実行しますが、インターネット接続が時々しか利用できない場所に行きます。なので、インターネットがあるうちにできる限り更新したいと思います。

ありがとう!(osx 10.8.2 を実行中)

4

4 に答える 4

6

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 ディレクトリにあることを確認してください。

于 2012-11-26T22:24:33.387 に答える
4

確かに、でもシェルで十分なのに、なぜルビーを使うのでしょうか?

function update_all() {
  for dir in GitClones/*; do 
    cd "$dir" && git pull
  done
}
于 2012-11-26T22:12:30.723 に答える
1

glob の先頭を味に変更します。これにより、次の 2 つの便利なことが行われます。

  1. .git subdir が含まれている場合にのみ git pull します
  2. ドットで始まる git リポジトリを誰も持っていないため、ドット (.) ディレクトリをスキップします。

楽しみ

# 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
于 2012-11-26T22:59:46.277 に答える
0

プロバイダーの出力を改善し、OS に依存しないように改訂されました。これにより、ローカルの変更が消去され、コードが更新されます。

#!/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
于 2014-02-28T12:28:54.953 に答える