55 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			55 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| Tree and files
 | |
| ==============
 | |
| 
 | |
| To organize folders, git uses trees. In gitlib, those trees are
 | |
| represented via *Tree* object.
 | |
| 
 | |
| To get the root tree associated to a commit, use the *getTree* method on
 | |
| the commit object:
 | |
| 
 | |
| ```php
 | |
| $tree = $commit->getTree();
 | |
| ```
 | |
| 
 | |
| This tree is the entry point of all of your files.
 | |
| 
 | |
| The main method for a tree is the *getEntries* method. This method will
 | |
| return an array, indexed by name. Each of those elements will be the
 | |
| entry mode and the entry object.
 | |
| 
 | |
| Let's understand how it works with a concrete example:
 | |
| 
 | |
| ```php
 | |
| function displayTree(Tree $tree, $indent = 0)
 | |
| {
 | |
|     $indent = str_repeat(' ', $indent);
 | |
|     foreach ($tree->getEntries() as $name => $data) {
 | |
|         list($mode, $entry) = $data;
 | |
|         if ($entry instanceof Tree) {
 | |
|             echo $indent.$name.'/'.PHP_EOL;
 | |
|             displayTree($tree, $indent + 1);
 | |
|         } else {
 | |
|             echo $indent.$name.PHP_EOL;
 | |
|         }
 | |
|     }
 | |
| }
 | |
| 
 | |
| displayTree($commit->getTree());
 | |
| ```
 | |
| 
 | |
| This method will recursively display all entries of a tree.
 | |
| 
 | |
| Resolve a path
 | |
| --------------
 | |
| 
 | |
| To access directly a sub-file, the easier is probably to use the
 | |
| *resolvePath* method.
 | |
| 
 | |
| An example:
 | |
| 
 | |
| ```php
 | |
| $source = $tree->resolvePath('src/Gitonomy/Git');
 | |
| 
 | |
| $source instanceof Tree;
 | |
| ```
 | 
