1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
|
require 'git'
# needs read permission only
g = Git.open (working_dir = '.')
(git_dir, index_file)
g.index
g.index.readable?
g.index.writable?
g.repo
g.dir
g.log # returns array of Git::Commit objects
g.log.since('2 weeks ago')
g.log.between('v2.5', 'v2.6')
g.log.each {|l| puts l.sha }
g.blob('v2.5:Makefile').log.since('2 weeks ago')
g.object('HEAD^').to_s # git show / git rev-parse
g.object('HEAD^').contents
g.object('v2.5:Makefile').size
g.object('v2.5:Makefile').sha
g.tree(treeish)
g.blob(treeish)
g.commit(treeish)
g.revparse('v2.5:Makefile')
g.branches # returns Git::Branch objects
g.branches.local
g.branches.remote
g.branches[:master].commit
g.branches['origin/master'].commit
g.grep('hello') # implies HEAD
g.blob('v2.5:Makefile').grep('hello')
g.tag('v2.5').grep('hello', 'docs/')
g.diff(commit1, commit2).size
g.diff(commit1, commit2).stats
g.tree('v2.5').diff('v2.6').insertions
g.diff('gitsearch1', 'v2.5').path('lib/')
g.diff('gitsearch1', @git.tree('v2.5'))
g.diff('gitsearch1', 'v2.5').path('docs/').patch
g.tree('v2.5').diff('v2.6').patch
g.tree('v2.5').diff('v2.6').each do |file_diff|
puts file_diff.path
puts file_diff.patch
puts file_diff.blob(:src).contents
end
g.config('user.name') # returns 'Scott Chacon'
g.config # returns whole config hash
***** IMPLEMENTED *****
g.ls_files
g.ls_files(:stage => true)
g.tag # returns array of Git::Tag objects
# needs write permission
g = Git.init
Git.init('project')
Git.init('/home/schacon/proj',
{ :git_dir => '/opt/git/proj.git',
:index_file => '/tmp/index'} )
g = Git.clone(URI, :name => 'name', :path => '/tmp/checkout'
(git_dir, index_file)
***** IMPLEMENTED *****
g.config('user.name', 'Scott Chacon')
g.config('user.email', 'email@email.com')
g.add('.')
g.add([file1, file2])
g.remove('file.txt').and_file
g.commit('message')
g.commit_a('message')
g.reset # defaults to HEAD
g.reset_hard(Git::Commit)
g.branch('new_branch')
g.branch('new_branch').delete
g.checkout('new_branch')
g.checkout('new_branch', :create_branch => true)
g.checkout_b('new_branch')
g.merge('new_branch')
g.merge(Git::Branch)
g.merge(Git::Branch, Git::Branch)
g.fetch
g.fetch(Git::Repo)
g.pull
g.pull(Git::Repo, Git::Branch) # fetch and a merge
g.tag('tag_name') # returns Git::Tag
g.pack
|