Kiln » TortoiseHg » TortoiseHg
Clone URL:  
shelve.txt
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
122
123
====================== TortoiseHg Shelve Tool ====================== .. module:: commit.dialog :synopsis: Dialog used to perform shelve/unshelve operations **The win32text extension can cause trouble with hunk selection. This has been resolved in Mercurial 1.3 and TortoiseHg 0.8, but requires proper configuration. See issue #82.** .. figure:: figures/shelve.png :alt: Shelve dialog Shelve dialog Visually it is very similar to the status dialog in 0.6 and the commit tool in 0.7. The purpose of this dialog is to allow the user to *shelve* selected changes from the working directory, store them in a special patch file in the repository, and then *unshelve* them back at a later time. Walking across the toolbar, the buttons perform the following tasks: :guilabel:`Refresh` Reload the state of the working directory. It retains file check and selection state across refresh, but not hunks. :guilabel:`Shelve` Shelve selected diffs in checked files. :guilabel:`Unshelve` Replace the shelved changes back into the working directory. :guilabel:`Revert` Revert checked files to last revisioned state. :guilabel:`Add` Add checked files that were in unknown *?* state. These files will then be versioned as soon as they are committed. :guilabel:`Move` Move checked files to specified target directory. This move is done with Mercurial's full knowledge. :guilabel:`Remove` Delete checked unversioned files and/or remove (mark as deleted) any versioned files. :guilabel:`Show Diff` This is a toggle button that shows and hides the entire diff panel. Hiding the diff panel can sometimes be useful in large repositories. Below the file list are checkboxes that toggle the inclusion of the various classes of files {modified, added, removed, deleted, unknown, clean, ignored}. Shelving Changes ---------------- Just like the commit tool, this dialog uses TortoiseHg's integrated hunk selection code to allow the user to select the files and change hunks to move to the shelf. When you press the shelve button, the selected changes are removed from the working directory and placed in a patch file. If the shelf already had changes in it, you will be asked whether to replace those changes or to merge these new changes into it. When the shelf has changes, the unshelve button will be active. When the unshelve button is pressed, the shelved changes are reapplied to the working directory. How is this different than record/commit? ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Shelved changes are physically removed from the working directory until you unshelve them. This means you can build your project and run tests on it while the shelved changes are gone. This is safer than selecting changes at build time since you can test whether the change being committed is valid. Shelving changes is also useful for removing partially completed work to make sure it doesn't interfere with the debugging of other changes you are making. Caveat: the shelved changes are stored in a patch that is based on the current working directory contents. There's no guarantee that the patch can be cleanly reapplied later if the shelved changes conflict with changes made to your code after the shelving. How is this different than MQ? ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ A shelf is, in effect, a single unnamed MQ patch that is never converted into a changeset. The shelve tool can be useful when you are maintaining a patch queue, since it can hold changes from one patch and re-apply them to another patch (or an entirely new patch). How is this different than attic? ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ The attic extension is a super-set of the shelve feature. In particular, attic allows you to have several named *shelves* which can be saved and restored independently. TortoiseHg doesn't support the attic extension in 0.7, but will probably support attic like features in future releases. Keyboard navigation ------------------- :guilabel:`CTRL-Q` will close the top dialog window :guilabel:`CTRL-C` in the diff panel will copy the currently highlighted (not selected, but highlighted) diff hunks to the clipboard. These can be pasted into a text buffer to generate any arbitrary patch based from the changes in your working directory. Note that the code in the shelve tool that copies the hunks to the clipboard is smart about diff headers. If your highlighted list includes a hunk from a file but not it's file diff header, the diff header will be added to the clipboard in the appropriate location in the stream to make the clipboard contents always be a valid patch. Configurables ------------- * :menuselection:`TortoiseHg --> Bottom Diffs` * :menuselection:`TortoiseHg --> Tab Width`