mirror of
https://github.com/git-learning-game/oh-my-git.git
synced 2024-11-29 21:45:09 +03:00
Extract terminal in its own scene, add a few proper levels with a description
This commit is contained in:
parent
ebbb505283
commit
7373984d47
11
levels/01-blob/description
Normal file
11
levels/01-blob/description
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
At its core, Git is very simple. It stores "objects", which are basically files identified by an "identifier" (short: ID).
|
||||||
|
|
||||||
|
There are four types of objects: blobs, trees, commits, and tags. The simplest type is a "blob", which is just a piece of text.
|
||||||
|
|
||||||
|
Let's create some blobs! To do that, create a file with the desired content, and then use
|
||||||
|
|
||||||
|
$ git hash-object -w <file>
|
||||||
|
|
||||||
|
The flag -w means "write", and tells Git to actually write the new blob to the disk.
|
||||||
|
|
||||||
|
Create three new blobs!
|
21
levels/02-tree/description
Normal file
21
levels/02-tree/description
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
Blobs just have some content and an ID. It would be convenient to be able to give names to a blob, right?
|
||||||
|
|
||||||
|
The second type of Git object is called a "tree" - a tree points a bunch of blobs, and gives each of them a name!
|
||||||
|
|
||||||
|
How can we build our own trees? Introducing: the index!
|
||||||
|
|
||||||
|
The index is like a "work in progress" version of a tree, where we can add and remove blobs. When we're happy with what we have built, we can make it into a real tree object!
|
||||||
|
|
||||||
|
We can use
|
||||||
|
|
||||||
|
$ git update-index --add <file>
|
||||||
|
|
||||||
|
to make the file's content into a blob, and to add that blob to the index using the file's name.
|
||||||
|
|
||||||
|
When we're happy with out index, we can convert it into a tree using
|
||||||
|
|
||||||
|
$ git write-tree
|
||||||
|
|
||||||
|
That command will output the ID of the newly crated tree.
|
||||||
|
|
||||||
|
Build a tree containing just the 'noises' file, which we conveniently placed in your current directory! :)
|
6
levels/02-tree/goal
Normal file
6
levels/02-tree/goal
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
echo 'meow' > noises
|
||||||
|
git update-index --add noises
|
||||||
|
git write-tree
|
||||||
|
|
||||||
|
rm noises
|
||||||
|
git update-index --remove noises
|
1
levels/02-tree/start
Normal file
1
levels/02-tree/start
Normal file
@ -0,0 +1 @@
|
|||||||
|
echo 'meow' > noises
|
9
levels/03-commit/description
Normal file
9
levels/03-commit/description
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
So a tree describes the state of a directory structure at a specific point in time.
|
||||||
|
|
||||||
|
It would be nice if we could remember when that state existed, and who authored it, right?
|
||||||
|
|
||||||
|
Enter: commits. They are objects that point to a tree and contain some additional metadata. You can create a commit using
|
||||||
|
|
||||||
|
$ git commit-tree <tree> -m "Description of your commit"
|
||||||
|
|
||||||
|
Make a commit from the tree in this repository!
|
7
levels/03-commit/goal
Normal file
7
levels/03-commit/goal
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
touch empty_file
|
||||||
|
git add .
|
||||||
|
git write-tree
|
||||||
|
git commit-tree 3185 -m 'Clever commit message'
|
||||||
|
|
||||||
|
rm empty_file
|
||||||
|
git update-index --remove empty_file
|
6
levels/03-commit/start
Normal file
6
levels/03-commit/start
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
touch empty_file
|
||||||
|
git add .
|
||||||
|
git write-tree
|
||||||
|
|
||||||
|
rm empty_file
|
||||||
|
git update-index --remove empty_file
|
5
levels/04-parents/description
Normal file
5
levels/04-parents/description
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
When using the commit-tree command, you can optionally specify a parent:
|
||||||
|
|
||||||
|
$ git commit-tree <tree> -m "Description" -p <parent commit>
|
||||||
|
|
||||||
|
Can you make a string of three commits? We placed an empty tree in your repo to get you started.
|
2
levels/04-parents/goal
Normal file
2
levels/04-parents/goal
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
git write-tree
|
||||||
|
git commit-tree 4b82 -m 'We cannot really construct the goal yet :)'
|
1
levels/04-parents/start
Normal file
1
levels/04-parents/start
Normal file
@ -0,0 +1 @@
|
|||||||
|
git write-tree
|
@ -1 +0,0 @@
|
|||||||
git commit --allow-empty -m "Emtpy commit"
|
|
@ -1,5 +0,0 @@
|
|||||||
echo -e "bread\ntomato\nbread" > sandwich
|
|
||||||
git add sandwich
|
|
||||||
git commit -m "Initial sandwich"
|
|
||||||
echo -e "bread\ntomato\ncucumber\nbread" > sandwich
|
|
||||||
git commit -am "Add cucumber"
|
|
4
main.gd
4
main.gd
@ -39,6 +39,7 @@ func list_levels():
|
|||||||
levels.append(file)
|
levels.append(file)
|
||||||
|
|
||||||
dir.list_dir_end()
|
dir.list_dir_end()
|
||||||
|
levels.sort()
|
||||||
return levels
|
return levels
|
||||||
|
|
||||||
func load_level(id):
|
func load_level(id):
|
||||||
@ -54,6 +55,9 @@ func load_level(id):
|
|||||||
var goal_script = level_prefix+level+"/goal"
|
var goal_script = level_prefix+level+"/goal"
|
||||||
var active_script = level_prefix+level+"/start"
|
var active_script = level_prefix+level+"/start"
|
||||||
|
|
||||||
|
var description = game.read_file(level_prefix+level+"/description")
|
||||||
|
$LevelDescription.bbcode_text = description
|
||||||
|
|
||||||
OS.execute("rm", ["-r", active_repository_path], true)
|
OS.execute("rm", ["-r", active_repository_path], true)
|
||||||
OS.execute("rm", ["-r", goal_repository_path], true)
|
OS.execute("rm", ["-r", goal_repository_path], true)
|
||||||
construct_repo(goal_script, goal_repository_path)
|
construct_repo(goal_script, goal_repository_path)
|
||||||
|
107
main.tscn
107
main.tscn
@ -1,17 +1,10 @@
|
|||||||
[gd_scene load_steps=8 format=2]
|
[gd_scene load_steps=5 format=2]
|
||||||
|
|
||||||
[ext_resource path="res://terminal.gd" type="Script" id=1]
|
[ext_resource path="res://terminal.tscn" type="PackedScene" id=1]
|
||||||
[ext_resource path="res://main.gd" type="Script" id=2]
|
[ext_resource path="res://main.gd" type="Script" id=2]
|
||||||
[ext_resource path="res://repository.tscn" type="PackedScene" id=3]
|
[ext_resource path="res://repository.tscn" type="PackedScene" id=3]
|
||||||
[ext_resource path="res://command_button.tscn" type="PackedScene" id=4]
|
|
||||||
[ext_resource path="res://fonts/default.tres" type="DynamicFont" id=5]
|
[ext_resource path="res://fonts/default.tres" type="DynamicFont" id=5]
|
||||||
|
|
||||||
[sub_resource type="StyleBoxFlat" id=1]
|
|
||||||
bg_color = Color( 0, 0, 0, 1 )
|
|
||||||
|
|
||||||
[sub_resource type="StyleBoxFlat" id=2]
|
|
||||||
bg_color = Color( 0, 0, 0, 1 )
|
|
||||||
|
|
||||||
[node name="Main" type="Node2D"]
|
[node name="Main" type="Node2D"]
|
||||||
script = ExtResource( 2 )
|
script = ExtResource( 2 )
|
||||||
|
|
||||||
@ -24,71 +17,13 @@ __meta__ = {
|
|||||||
"_edit_use_anchors_": false
|
"_edit_use_anchors_": false
|
||||||
}
|
}
|
||||||
|
|
||||||
[node name="Terminal" type="Control" parent="."]
|
[node name="Terminal" parent="." instance=ExtResource( 1 )]
|
||||||
script = ExtResource( 1 )
|
anchor_right = 0.0
|
||||||
__meta__ = {
|
anchor_bottom = 0.0
|
||||||
"_edit_use_anchors_": false
|
margin_left = 1223.0
|
||||||
}
|
margin_top = 484.0
|
||||||
|
margin_right = 1898.0
|
||||||
[node name="Control" type="VBoxContainer" parent="Terminal"]
|
margin_bottom = 1059.0
|
||||||
anchor_right = 1.0
|
|
||||||
anchor_bottom = 1.0
|
|
||||||
margin_left = 1208.0
|
|
||||||
margin_top = 6.0
|
|
||||||
margin_right = 1908.0
|
|
||||||
margin_bottom = 1070.0
|
|
||||||
custom_constants/separation = 0
|
|
||||||
__meta__ = {
|
|
||||||
"_edit_use_anchors_": false
|
|
||||||
}
|
|
||||||
|
|
||||||
[node name="Output" type="TextEdit" parent="Terminal/Control"]
|
|
||||||
margin_right = 700.0
|
|
||||||
margin_bottom = 1038.0
|
|
||||||
focus_mode = 0
|
|
||||||
size_flags_vertical = 3
|
|
||||||
custom_styles/read_only = SubResource( 1 )
|
|
||||||
custom_fonts/font = ExtResource( 5 )
|
|
||||||
readonly = true
|
|
||||||
__meta__ = {
|
|
||||||
"_edit_use_anchors_": false
|
|
||||||
}
|
|
||||||
|
|
||||||
[node name="Button" parent="Terminal/Control" instance=ExtResource( 4 )]
|
|
||||||
visible = false
|
|
||||||
margin_left = 0.0
|
|
||||||
margin_top = 852.0
|
|
||||||
margin_right = 700.0
|
|
||||||
margin_bottom = 905.0
|
|
||||||
align = 0
|
|
||||||
|
|
||||||
[node name="Button2" parent="Terminal/Control" instance=ExtResource( 4 )]
|
|
||||||
visible = false
|
|
||||||
margin_left = 0.0
|
|
||||||
margin_top = 905.0
|
|
||||||
margin_right = 700.0
|
|
||||||
margin_bottom = 958.0
|
|
||||||
text = "git switch -c $RANDOM"
|
|
||||||
align = 0
|
|
||||||
|
|
||||||
[node name="Button3" parent="Terminal/Control" instance=ExtResource( 4 )]
|
|
||||||
visible = false
|
|
||||||
margin_left = 0.0
|
|
||||||
margin_top = 958.0
|
|
||||||
margin_right = 700.0
|
|
||||||
margin_bottom = 1011.0
|
|
||||||
text = "git checkout HEAD^"
|
|
||||||
align = 0
|
|
||||||
|
|
||||||
[node name="Input" type="LineEdit" parent="Terminal/Control"]
|
|
||||||
margin_top = 1038.0
|
|
||||||
margin_right = 700.0
|
|
||||||
margin_bottom = 1064.0
|
|
||||||
custom_styles/normal = SubResource( 2 )
|
|
||||||
custom_fonts/font = ExtResource( 5 )
|
|
||||||
__meta__ = {
|
|
||||||
"_edit_use_anchors_": false
|
|
||||||
}
|
|
||||||
|
|
||||||
[node name="CommitMessage" type="TextEdit" parent="."]
|
[node name="CommitMessage" type="TextEdit" parent="."]
|
||||||
visible = false
|
visible = false
|
||||||
@ -111,10 +46,10 @@ __meta__ = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[node name="LevelSelect" type="MenuButton" parent="."]
|
[node name="LevelSelect" type="MenuButton" parent="."]
|
||||||
margin_left = 11.5584
|
margin_left = 1226.25
|
||||||
margin_top = 1036.1
|
margin_top = 16.2615
|
||||||
margin_right = 173.558
|
margin_right = 1388.25
|
||||||
margin_bottom = 1068.1
|
margin_bottom = 48.2615
|
||||||
custom_fonts/font = ExtResource( 5 )
|
custom_fonts/font = ExtResource( 5 )
|
||||||
text = "Select level..."
|
text = "Select level..."
|
||||||
flat = false
|
flat = false
|
||||||
@ -153,6 +88,18 @@ margin_right = 1198.0
|
|||||||
margin_bottom = 1033.0
|
margin_bottom = 1033.0
|
||||||
size_flags_horizontal = 3
|
size_flags_horizontal = 3
|
||||||
size_flags_vertical = 3
|
size_flags_vertical = 3
|
||||||
label = "Yours!"
|
label = "Your repository"
|
||||||
[connection signal="text_entered" from="Terminal/Control/Input" to="Terminal" method="send_command"]
|
|
||||||
|
[node name="LevelDescription" type="RichTextLabel" parent="."]
|
||||||
|
margin_left = 1224.0
|
||||||
|
margin_top = 58.0
|
||||||
|
margin_right = 1889.0
|
||||||
|
margin_bottom = 472.0
|
||||||
|
custom_fonts/normal_font = ExtResource( 5 )
|
||||||
|
bbcode_enabled = true
|
||||||
|
bbcode_text = "Level description here!"
|
||||||
|
text = "Level description here!"
|
||||||
|
__meta__ = {
|
||||||
|
"_edit_use_anchors_": false
|
||||||
|
}
|
||||||
[connection signal="pressed" from="CommitMessage/SaveButton" to="." method="save_commit_message"]
|
[connection signal="pressed" from="CommitMessage/SaveButton" to="." method="save_commit_message"]
|
||||||
|
@ -17,11 +17,11 @@ __meta__ = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[node name="Index" type="Label" parent="."]
|
[node name="Index" type="Label" parent="."]
|
||||||
visible = false
|
margin_left = 32.0
|
||||||
margin_left = 36.0787
|
margin_top = 80.0
|
||||||
margin_top = 120.0
|
|
||||||
margin_right = 375.079
|
margin_right = 375.079
|
||||||
margin_bottom = 1044.0
|
margin_bottom = 1044.0
|
||||||
|
custom_fonts/font = ExtResource( 2 )
|
||||||
text = "file1
|
text = "file1
|
||||||
file2"
|
file2"
|
||||||
__meta__ = {
|
__meta__ = {
|
||||||
@ -29,9 +29,8 @@ __meta__ = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[node name="IndexLabel" type="Label" parent="."]
|
[node name="IndexLabel" type="Label" parent="."]
|
||||||
visible = false
|
margin_left = 21.0
|
||||||
margin_left = 38.0
|
margin_top = 65.0
|
||||||
margin_top = 69.0
|
|
||||||
margin_right = 377.0
|
margin_right = 377.0
|
||||||
margin_bottom = 108.0
|
margin_bottom = 108.0
|
||||||
text = "Index:"
|
text = "Index:"
|
||||||
|
74
terminal.tscn
Normal file
74
terminal.tscn
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
[gd_scene load_steps=6 format=2]
|
||||||
|
|
||||||
|
[ext_resource path="res://fonts/default.tres" type="DynamicFont" id=1]
|
||||||
|
[ext_resource path="res://terminal.gd" type="Script" id=2]
|
||||||
|
[ext_resource path="res://command_button.tscn" type="PackedScene" id=4]
|
||||||
|
|
||||||
|
[sub_resource type="StyleBoxFlat" id=1]
|
||||||
|
bg_color = Color( 0, 0, 0, 1 )
|
||||||
|
|
||||||
|
[sub_resource type="StyleBoxFlat" id=2]
|
||||||
|
bg_color = Color( 0, 0, 0, 1 )
|
||||||
|
|
||||||
|
[node name="Terminal" type="Container"]
|
||||||
|
anchor_right = 1.0
|
||||||
|
anchor_bottom = 1.0
|
||||||
|
script = ExtResource( 2 )
|
||||||
|
__meta__ = {
|
||||||
|
"_edit_use_anchors_": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[node name="Control" type="VBoxContainer" parent="."]
|
||||||
|
anchor_right = 1.0
|
||||||
|
anchor_bottom = 1.0
|
||||||
|
custom_constants/separation = 0
|
||||||
|
__meta__ = {
|
||||||
|
"_edit_use_anchors_": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[node name="Output" type="TextEdit" parent="Control"]
|
||||||
|
margin_right = 1920.0
|
||||||
|
margin_bottom = 1054.0
|
||||||
|
focus_mode = 0
|
||||||
|
size_flags_vertical = 3
|
||||||
|
custom_styles/read_only = SubResource( 1 )
|
||||||
|
custom_fonts/font = ExtResource( 1 )
|
||||||
|
readonly = true
|
||||||
|
__meta__ = {
|
||||||
|
"_edit_use_anchors_": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[node name="Button" parent="Control" instance=ExtResource( 4 )]
|
||||||
|
visible = false
|
||||||
|
margin_top = 852.0
|
||||||
|
margin_right = 700.0
|
||||||
|
margin_bottom = 905.0
|
||||||
|
align = 0
|
||||||
|
|
||||||
|
[node name="Button2" parent="Control" instance=ExtResource( 4 )]
|
||||||
|
visible = false
|
||||||
|
margin_top = 905.0
|
||||||
|
margin_right = 700.0
|
||||||
|
margin_bottom = 958.0
|
||||||
|
text = "git switch -c $RANDOM"
|
||||||
|
align = 0
|
||||||
|
|
||||||
|
[node name="Button3" parent="Control" instance=ExtResource( 4 )]
|
||||||
|
visible = false
|
||||||
|
margin_top = 958.0
|
||||||
|
margin_right = 700.0
|
||||||
|
margin_bottom = 1011.0
|
||||||
|
text = "git checkout HEAD^"
|
||||||
|
align = 0
|
||||||
|
|
||||||
|
[node name="Input" type="LineEdit" parent="Control"]
|
||||||
|
margin_top = 1054.0
|
||||||
|
margin_right = 1920.0
|
||||||
|
margin_bottom = 1080.0
|
||||||
|
custom_styles/normal = SubResource( 2 )
|
||||||
|
custom_fonts/font = ExtResource( 1 )
|
||||||
|
caret_blink = true
|
||||||
|
__meta__ = {
|
||||||
|
"_edit_use_anchors_": false
|
||||||
|
}
|
||||||
|
[connection signal="text_entered" from="Control/Input" to="." method="send_command"]
|
Loading…
Reference in New Issue
Block a user