2010-06-05 2 views
1
mkdir /tmp/scratch 
cd /tmp/scratch 
git init . 

- * - xx.rb:grain - en essayant d'ajouter des fichiers git repo sans eux écrit au système de fichiers

SCRATCH = '/tmp/scratch' 
repo = Repo.new(SCRATCH) 

def add_multiple_commits_same_file_different_content(repo) 
    previous_commit = repo.commits.first && repo.commits.first.id 
    dir = "./" 
    (0...5).each do |count| 
    i1 = repo.index 
    i1.read_tree('master') 
    i1.add("#{dir}foo.txt", "hello foo, count is #{count}.\n") 
    dir += "sd#{count}/" 
    previous_commit = i1.commit("my commit - #{count}", 
          previous_commit, 
          Actor.new("j#{count}", "[email protected]#{count}.zz"), 
          previous_commit.nil? ? nil : repo.commits(previous_commit).first.tree) 
    end 
end 

add_multiple_commits_same_file_different_content(repo) 

--- --- *

git status: 
# On branch master 
# Changes to be committed: 
# (use "git reset HEAD <file>..." to unstage) 
# 
#  deleted: ./foo.txt 
#  deleted: ./sd0/foo.txt 
#  deleted: ./sd0/sd1/foo.txt 
#  deleted: ./sd0/sd1/sd2/foo.txt 
#  deleted: ./sd0/sd1/sd2/sd3/foo.txt 
#  deleted: ./sd0/sd1/sd2/sd3/sd4/foo.txt 

--- * ----

Si je tente de vérifier les fichiers dont ils sont supprimés. Toutes les idées sur hwta je fais mal.

Merci John

Répondre

4

Je sais que c'est un ancien poste, mais j'avais le même problème et trouvé lors de la recherche d'une solution. On dirait que vous devez être dans le répertoire repo lors de l'ajout du (des) fichier (s). Voici ce que j'ai fait pour que ça marche ...

repo = Grit::Repo.init('repo/test.git') 

File.open('repo/test.git/foo.txt', 'w') { |f| f.puts 'Hello World!' } 

Dir.chdir('repo/test.git') { repo.add('foo.txt') } 

repo.commit_index('This commit worked!') 

L'étape clé est le bloc Dir.chdir. J'espère que cela fonctionnera pour vous aussi!

0

À mon avis grit ne suit pas vraiment POLA alors voici comment ajouter tous les fichiers modifiés. Ma courbe d'apprentissage ici était que les fichiers retournés par Grit (par exemple repo.status.files) ne fonctionneraient pas s'ils étaient passés à repo.add. Au lieu de cela, vous devez utiliser des noms de fichiers. Je devais aller dans le code source pour comprendre cela.

location = '/foo/bar/my_repo' 
repo = Grit::Repo.new(location) 
# modified, added, un-tracked files 
changed_files = repo.status.files.select { |k,v| (v.type =~ /(M|A)/ || v.untracked) } 

Dir.chdir(location) { 
    changed_files.each do |changed_file| 
    # changed_file here is array, which first element is name of file 
    # e.g. changed_file.first => "example.txt." 
    repo.add(changed_file.first) 
    end 
} 

repo.commit_index("Successful commit! yeeeee! ") 
Questions connexes