added documentation and a license file
[rubygit.git] / EXAMPLES
blobc0d32c56f5f50e361f2a2a122ce8e95411e7c148
1    require 'git'
2    
3    # needs read permission only
4    
5    g = Git.open (working_dir = '.')
6           (git_dir, index_file)
7    
8    g.index
9    g.index.readable?
10    g.index.writable?
11    g.repo
12    g.dir
13    
14    g.log   # returns array of Git::Commit objects
15    g.log.since('2 weeks ago')
16    g.log.between('v2.5', 'v2.6')
17    g.log.each {|l| puts l.sha }
18    g.gblob('v2.5:Makefile').log.since('2 weeks ago')
19    
20    g.object('HEAD^').to_s  # git show / git rev-parse
21    g.object('HEAD^').contents
22    g.object('v2.5:Makefile').size
23    g.object('v2.5:Makefile').sha
24    
25    g.gtree(treeish)
26    g.gblob(treeish)
27    g.gcommit(treeish)
28    
29    g.revparse('v2.5:Makefile')
30    
31    g.branches # returns Git::Branch objects
32    g.branches.local
33    g.branches.remote
34    g.branches[:master].gcommit
35    g.branches['origin/master'].gcommit
36    
37    g.grep('hello')  # implies HEAD
38    g.blob('v2.5:Makefile').grep('hello')
39    g.tag('v2.5').grep('hello', 'docs/')
40    
41    g.diff(commit1, commit2).size
42    g.diff(commit1, commit2).stats
43    g.gtree('v2.5').diff('v2.6').insertions
44    g.diff('gitsearch1', 'v2.5').path('lib/')
45    g.diff('gitsearch1', @git.gtree('v2.5'))
46    g.diff('gitsearch1', 'v2.5').path('docs/').patch
47    g.gtree('v2.5').diff('v2.6').patch
48    
49    g.gtree('v2.5').diff('v2.6').each do |file_diff|
50      puts file_diff.path
51      puts file_diff.patch
52      puts file_diff.blob(:src).contents
53    end
54    
55    g.config('user.name')  # returns 'Scott Chacon'
56    g.config # returns whole config hash
57    
58    g.tag # returns array of Git::Tag objects
59    
60    
61    
62    # needs write permission
63    
64    
65    g = Git.init
66      Git.init('project')
67      Git.init('/home/schacon/proj', 
68                   { :git_dir => '/opt/git/proj.git', 
69                      :index_file => '/tmp/index'} )
70           
71    g = Git.clone(URI, :name => 'name', :path => '/tmp/checkout'
72           (git_dir, index_file)
73    
74    g.config('user.name', 'Scott Chacon')
75    g.config('user.email', 'email@email.com')      
76    
77    g.add('.')
78    g.add([file1, file2])
79    
80    g.remove('file.txt')
81    g.remove(['file.txt', 'file2.txt'])
82                      
83    g.commit('message')
84    g.commit_all('message')
85    
86    g = Git.clone(repo, 'myrepo')
87    Dir.chdir('myrepo') do
88     new_file('test-file', 'blahblahblah')
89     g.status.untracked.each do |file|
90      puts file.blob(:index).contents
91     end
92    end
93    
94    g.reset # defaults to HEAD
95    g.reset_hard(Git::Commit)
96    
97    g.branch('new_branch') # creates new or fetches existing
98    g.branch('new_branch').checkout
99    g.branch('new_branch').delete
100    g.branch('existing_branch').checkout
101    
102    g.checkout('new_branch')
103    g.checkout(g.branch('new_branch'))
104    
105    g.branch(name).merge(branch2)
106    g.branch(branch2).merge  # merges HEAD with branch2
107    
108    g.branch(name).in_branch(message) { # add files }  # auto-commits
109    g.merge('new_branch')
110    g.merge('origin/remote_branch')
111    g.merge(b.branch('master'))
112    g.merge([branch1, branch2])
113    
114    r = g.add_remote(name, uri)  # Git::Remote
115    r = g.add_remote(name, Git::Base)  # Git::Remote
116    
117    g.remotes  # array of Git::Remotes
118    g.remote(name).fetch
119    g.remote(name).remove
120    g.remote(name).merge
121    g.remote(name).merge(branch)
122    
123    g.fetch
124    g.fetch(g.remotes.first)
125    
126    g.pull
127    g.pull(Git::Repo, Git::Branch) # fetch and a merge
128    
129    g.add_tag('tag_name') # returns Git::Tag
130    
131    g.repack