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
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635
2636
2637
2638
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
2659
2660
2661
2662
2663
2664
2665
2666
2667
2668
2669
2670
2671
2672
2673
2674
2675
2676
2677
2678
2679
2680
2681
2682
2683
2684
2685
2686
2687
2688
2689
2690
2691
2692
2693
2694
2695
2696
2697
2698
2699
2700
2701
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
2712
2713
2714
2715
2716
2717
2718
2719
2720
2721
2722
2723
2724
2725
2726
2727
2728
2729
2730
2731
2732
2733
2734
2735
2736
2737
2738
2739
2740
2741
2742
2743
2744
2745
2746
2747
2748
2749
2750
2751
2752
2753
2754
2755
2756
2757
2758
2759
2760
2761
2762
2763
2764
2765
2766
2767
2768
2769
2770
2771
2772
2773
2774
2775
2776
2777
2778
2779
2780
2781
2782
2783
2784
2785
2786
2787
2788
2789
2790
2791
2792
2793
2794
2795
2796
2797
2798
2799
2800
2801
2802
2803
2804
2805
2806
2807
2808
2809
2810
2811
2812
2813
2814
2815
2816
2817
2818
2819
2820
2821
2822
2823
2824
2825
2826
2827
2828
2829
2830
2831
2832
2833
2834
2835
2836
2837
2838
2839
2840
2841
2842
2843
2844
2845
2846
2847
2848
2849
2850
2851
2852
2853
2854
2855
2856
2857
2858
2859
2860
2861
2862
2863
2864
2865
2866
2867
2868
2869
2870
2871
2872
2873
2874
2875
2876
2877
2878
2879
2880
2881
2882
2883
2884
2885
2886
2887
2888
2889
2890
2891
2892
2893
2894
2895
2896
2897
2898
2899
2900
2901
2902
2903
2904
2905
2906
2907
2908
2909
2910
2911
2912
2913
2914
2915
2916
2917
2918
2919
2920
2921
2922
2923
2924
2925
2926
2927
2928
2929
2930
2931
2932
2933
2934
2935
2936
2937
2938
2939
2940
2941
2942
2943
2944
2945
2946
2947
2948
2949
2950
2951
2952
2953
2954
2955
2956
2957
2958
2959
2960
2961
2962
2963
2964
2965
2966
2967
2968
2969
2970
2971
2972
2973
2974
2975
2976
2977
2978
2979
2980
2981
2982
2983
2984
2985
2986
2987
2988
2989
2990
2991
2992
2993
2994
2995
2996
2997
2998
2999
3000
3001
3002
3003
3004
3005
3006
3007
3008
3009
3010
3011
3012
3013
3014
3015
3016
3017
3018
3019
3020
3021
3022
3023
3024
3025
3026
3027
3028
3029
3030
3031
3032
3033
3034
3035
3036
3037
3038
3039
3040
3041
3042
3043
3044
3045
3046
3047
3048
3049
3050
3051
3052
3053
3054
3055
3056
3057
3058
3059
3060
3061
3062
3063
3064
3065
3066
3067
3068
3069
3070
3071
3072
3073
3074
3075
3076
3077
3078
3079
3080
3081
3082
3083
3084
3085
3086
3087
3088
3089
3090
3091
3092
3093
3094
3095
3096
3097
3098
3099
3100
3101
3102
3103
3104
3105
3106
3107
3108
3109
3110
3111
3112
3113
3114
3115
3116
3117
3118
3119
3120
3121
3122
3123
3124
3125
3126
3127
3128
3129
3130
3131
3132
3133
3134
3135
3136
3137
3138
3139
3140
3141
3142
3143
3144
3145
3146
3147
3148
3149
3150
3151
3152
3153
3154
3155
3156
3157
3158
3159
3160
3161
3162
3163
3164
3165
3166
3167
3168
3169
3170
3171
3172
3173
3174
3175
3176
3177
3178
3179
3180
3181
3182
3183
3184
3185
3186
3187
3188
3189
3190
3191
3192
3193
3194
3195
3196
3197
3198
3199
3200
3201
3202
3203
3204
3205
3206
3207
3208
3209
3210
3211
3212
3213
3214
3215
3216
3217
3218
3219
3220
3221
3222
3223
3224
3225
3226
3227
3228
3229
3230
3231
3232
3233
3234
3235
3236
3237
3238
3239
3240
3241
3242
3243
3244
3245
3246
3247
3248
3249
3250
3251
3252
3253
3254
3255
3256
3257
3258
3259
3260
3261
3262
3263
3264
3265
3266
3267
3268
3269
3270
3271
3272
3273
3274
3275
3276
3277
3278
3279
3280
3281
3282
3283
3284
3285
3286
3287
3288
3289
3290
3291
3292
3293
3294
3295
3296
3297
3298
3299
3300
3301
3302
3303
3304
3305
3306
3307
3308
3309
3310
3311
3312
3313
3314
3315
3316
3317
3318
3319
3320
3321
3322
3323
3324
3325
3326
3327
3328
3329
3330
3331
3332
3333
3334
3335
3336
3337
3338
3339
3340
3341
3342
3343
3344
3345
3346
3347
3348
3349
3350
3351
3352
3353
3354
3355
3356
3357
3358
3359
3360
3361
3362
3363
3364
3365
3366
3367
3368
3369
3370
3371
3372
3373
3374
3375
3376
3377
3378
3379
3380
3381
3382
3383
3384
3385
3386
3387
3388
3389
3390
3391
3392
3393
3394
3395
3396
3397
3398
3399
3400
3401
3402
3403
3404
3405
3406
3407
3408
3409
3410
3411
3412
3413
3414
3415
3416
3417
3418
3419
3420
3421
3422
3423
3424
3425
3426
3427
3428
3429
3430
3431
3432
3433
3434
3435
3436
3437
3438
3439
3440
3441
3442
3443
3444
3445
3446
3447
3448
3449
3450
3451
3452
3453
3454
3455
3456
3457
3458
3459
3460
3461
3462
3463
3464
3465
3466
3467
3468
3469
3470
3471
3472
3473
3474
3475
3476
3477
3478
3479
3480
3481
3482
3483
3484
3485
3486
3487
3488
3489
3490
3491
3492
3493
3494
3495
3496
3497
3498
3499
3500
3501
3502
3503
3504
3505
3506
3507
3508
3509
3510
3511
3512
3513
3514
3515
3516
3517
3518
3519
3520
3521
3522
3523
3524
3525
3526
3527
3528
3529
3530
3531
3532
3533
3534
3535
3536
3537
3538
3539
3540
3541
3542
3543
3544
3545
3546
3547
3548
3549
3550
3551
3552
3553
3554
3555
3556
3557
3558
3559
3560
3561
3562
3563
3564
3565
3566
3567
3568
3569
3570
3571
3572
3573
3574
3575
3576
3577
3578
3579
3580
3581
3582
3583
3584
3585
3586
3587
3588
3589
3590
3591
3592
3593
3594
3595
3596
3597
3598
3599
3600
3601
3602
3603
3604
3605
3606
3607
3608
3609
3610
3611
3612
3613
3614
3615
3616
3617
3618
3619
3620
3621
3622
3623
3624
3625
3626
3627
3628
3629
3630
3631
3632
3633
3634
3635
3636
3637
3638
3639
3640
3641
3642
3643
3644
3645
3646
3647
3648
3649
3650
3651
3652
3653
3654
3655
3656
3657
3658
3659
3660
3661
3662
3663
3664
3665
3666
3667
3668
3669
3670
3671
3672
3673
3674
3675
3676
3677
3678
3679
3680
3681
3682
3683
3684
3685
3686
3687
3688
3689
3690
3691
3692
3693
3694
3695
3696
3697
3698
3699
3700
3701
3702
3703
3704
3705
3706
3707
3708
3709
3710
3711
3712
3713
3714
3715
3716
3717
3718
3719
3720
3721
3722
3723
3724
3725
3726
3727
3728
3729
3730
3731
3732
3733
3734
3735
3736
3737
3738
3739
3740
3741
3742
3743
3744
3745
3746
3747
3748
3749
3750
3751
3752
3753
3754
3755
3756
3757
3758
3759
3760
3761
3762
3763
3764
3765
3766
3767
3768
3769
3770
3771
3772
3773
3774
3775
3776
3777
3778
3779
3780
3781
3782
3783
3784
3785
3786
3787
3788
3789
3790
3791
3792
3793
3794
3795
3796
3797
3798
3799
3800
3801
3802
3803
3804
3805
3806
3807
3808
3809
3810
3811
3812
3813
3814
3815
3816
3817
3818
3819
3820
3821
3822
3823
3824
3825
3826
3827
3828
3829
3830
3831
3832
3833
3834
3835
3836
3837
3838
3839
3840
3841
3842
3843
3844
3845
3846
3847
3848
3849
3850
3851
3852
3853
3854
3855
3856
3857
3858
3859
3860
3861
3862
3863
3864
3865
3866
3867
3868
3869
3870
3871
3872
3873
3874
3875
3876
3877
3878
3879
3880
3881
3882
3883
3884
3885
3886
3887
3888
3889
3890
3891
3892
3893
3894
3895
3896
3897
3898
3899
3900
3901
3902
3903
3904
3905
3906
3907
3908
3909
3910
3911
3912
3913
3914
3915
3916
3917
3918
3919
3920
3921
3922
3923
3924
3925
3926
3927
3928
3929
3930
3931
3932
3933
3934
3935
3936
3937
3938
3939
3940
3941
3942
3943
3944
3945
3946
3947
3948
3949
3950
3951
3952
3953
3954
3955
3956
3957
3958
3959
3960
3961
3962
3963
3964
3965
3966
3967
3968
3969
3970
3971
3972
3973
3974
3975
3976
3977
3978
3979
3980
3981
3982
3983
3984
3985
3986
3987
3988
3989
3990
3991
3992
3993
3994
3995
3996
3997
3998
3999
4000
4001
4002
4003
4004
4005
4006
4007
4008
4009
4010
4011
4012
4013
4014
4015
4016
4017
4018
4019
4020
4021
4022
4023
4024
4025
4026
4027
4028
4029
4030
4031
4032
4033
4034
4035
4036
4037
4038
4039
4040
4041
4042
4043
4044
4045
4046
4047
4048
4049
4050
4051
4052
4053
4054
4055
4056
4057
4058
4059
4060
4061
4062
4063
4064
4065
4066
4067
4068
4069
4070
4071
4072
4073
4074
4075
4076
4077
4078
|
<?xml version="1.0" ?>
<!DOCTYPE book PUBLIC "-//KDE//DTD DocBook XML V4.2-Based Variant V1.1//EN" "dtd/kdex.dtd" [
<!ENTITY kappname "&cervisia;">
<!ENTITY package "tdesdk">
<!ENTITY ssh "<command
>ssh</command
>">
<!ENTITY rsh "<command
>rsh</command
>">
<!ENTITY % addindex "IGNORE">
<!ENTITY % Spanish "INCLUDE"
> <!-- Change language only here -->
<!ENTITY CVS "<application
>CVS</application
>">
]>
<book lang="&language;">
<bookinfo>
<title
>Manual de &cervisia;</title>
<authorgroup>
<author
> <firstname
>Bernd</firstname
><surname
>Gehrmann</surname
> <affiliation
><address
><email
>bernd@mail.berlios.de</email
></address
></affiliation>
</author
>
<author
><firstname
>Carlos</firstname
><surname
>Woelz</surname
> <affiliation
><address
><email
>carloswoelz@imap-mail.com</email
></address
></affiliation>
</author
>
<othercredit role="translator"
> <firstname
>Marcos</firstname
> <surname
>Fouces Lago</surname
> <affiliation
><address
><email
>mfouces@yahoo.es</email
></address
></affiliation
> <contrib
>Traductor</contrib
> </othercredit
>
</authorgroup>
<copyright>
<year
>1999</year>
<year
>2000</year>
<year
>2001</year>
<year
>2002</year>
<holder
>Bernd Gehrmann</holder>
</copyright>
<copyright>
<year
>2004</year>
<holder
>Carlos Woelz</holder>
</copyright>
<legalnotice
>&FDLNotice;</legalnotice>
<date
>2004-06-06</date>
<releaseinfo
>2.01.90</releaseinfo>
<abstract>
<para
>&cervisia; proporciona una vista gráfica a la aplicación &CVS;.</para>
</abstract>
<keywordset>
<keyword
>KDE</keyword>
<keyword
>tdesdk</keyword>
<keyword
>Cervisia</keyword>
<keyword
>CVS</keyword>
<keyword
>Control de versión</keyword>
<keyword
>control de revisión</keyword>
</keywordset>
</bookinfo>
<chapter id="introduction">
<title
>Introducción</title>
<para
><ulink url="http://www.kde.org/apps/cervisia/"
>&cervisia;</ulink
> es un interfaz gráfico para cvs muy sencillo de usar. El objetivo es dar soporte a &CVS; así como a otros programas de control de versiones en una misma interfaz permitiendo resolver conflictos, ver historiales de cambios y diferencias entre archivos, el estado de los archivos sobre los que se está trabajando así como permitir realizar muchas de las funciones propias de un sistema de control de versiones.Puede obtener &cervisia; compilando el módulo tdesdk o instalando el paquete tdesdk que seguramente venga con su distribución. Actualmente, sólo permite el uso de &CVS;, sin embargo se preve implementar soporte para más sistemas de control de versiones en el futuro. </para>
<para
>Un sistema de control de versiones es una herramienta para registrar, gestionar y distribuir diferentes versiones de varios archivos. &CVS; es una de estas herramientas, le permite compartir fácilmente sus modificaciones ya que varias personas puedes trabajar en su propia copia del archivo en su disco duro sin temor a que se sobreescriban unos a otros los cambios. Permite recuperar versiones anteriores (útil para depurar fallos), la creación de varias ramas (para la versión inestable y estable p. ej.) y mucho más. </para>
<para
>El principal <firstterm
>repositorio</firstterm
> suele contener un proyecto de varias personas (comercial o no) pero puede beneficiarse de las ventajas para el control de las revisiones que le ofrece &CVS; incluso para un proyecto en que usted sea él único miembro. Es sencillo crear un repositorio local que le permitirá identificar los cambios que causaron fallos, deshacer modificaciones, evitar pérdidas accidentales de información, &etc;. </para>
<para
>En el repositorio se guardan los archivos del proyecto mientras que cada miembro mantiene una copia local (en su disco duro) del mismo llamada <firstterm
>copia local</firstterm
> o <firstterm
>copia de trabajo</firstterm
>, nosotros podemos realizar modificaciones sobre ellos y enviarlas al repositorio principal al tiempo que actualizamos nuestra copia local para recibir los cambios hechos por los demás miembros. </para>
</chapter>
<chapter id="getting-started">
<title
>Primeros pasos</title>
<sect1 id="accessing-repository">
<title
>Acceso al repositorio</title>
<para
>En esta sección veremos como usar algunas funciones básicas de un sistema de control de versiones mediante &cervisia;; veremos como se descargan módulos y como se trabaja sobre ellos. Para hacer esto, deberá tener acceso al repositorio al menos como cliente lo que significa que alguien (seguramente el administrador del &CVS;) le ha asignado una cuenta de usuario. También puede optar por crear una copia local del repositorio para su propio proyecto. </para>
<tip
><para
>Si piensa desarrollar un proyecto complejo, el uso de &CVS; es siempre una buena idea aunque usted sea el único miembro. Puede realizar los cambios que desee en su copia local y usar &cervisia; (o cualquier otra herramienta de administración de &CVS;) para realizar envíos y actualizaciones. Así, podrá rastrear los cambios que causaron problemas y deshacerlos, evitar pérdidas accidentales de información, &etc;. Verá que es muy sencillo crear un repositorio local con &cervisia;. </para>
<procedure>
<title
>Crear un repositorio local</title>
<step
><para
>Abra el diálogo <guilabel
>Crear nuevo repositorio (cvs init)</guilabel
> pulsando sobre <menuchoice
><guimenu
>Repositorio</guimenu
><guimenuitem
>Crear...</guimenuitem
></menuchoice
>. </para
></step>
<step
><para
>Pulse el botón <guilabel
>...</guilabel
> para seleccionar la directorio en la que quiere crear el repositorio o escriba directamente su ubicación en el cuadro de texto. Por ejemplo, si quiere situar el repositorio en la carpeta <filename
>/home/usuario</filename
> y llamarlo<filename
>cvsroot</filename
>, deberá escribir<filename
>/home/usuario/cvsroot</filename
> en el cuadro de texto o seleccionar la carpeta <filename
>/home/usuario</filename
> y añadir<filename
>cvsroot</filename
> a su nombre. </para
></step>
<step
><para
>Cuando pulse <guibutton
>Aceptar</guibutton
>, &cervisia; creará e iniciará la carpeta para el nuevo repositorio. </para
></step>
<step
><para
>Ahora ya puede importar su trabajo al repositorio o simplemente crear una carpeta en el repositorio para comenzar un nuevo módulo partiendo de cero. </para
></step>
</procedure>
</tip>
<para
>&cervisia; permite gestionar cómodamente todos sus repositorios con el diálogo <guilabel
>Configurar acceso a los repositorios</guilabel
>. Para acceder a ella, seleccione <menuchoice
><guimenu
>Repositorio</guimenu
><guimenuitem
>Repositorios...</guimenuitem
></menuchoice
>. </para>
<figure id="screenshot-repositories" float="1">
<title
>Captura de pantalla del diálogo de configuración de acceso a los repositorios de &cervisia;</title>
<mediaobject>
<imageobject
><imagedata format="PNG" fileref="repositories.png"/></imageobject>
<textobject
><phrase
>Captura de pantalla del diálogo de configuración de acceso a los repositorios de &cervisia;</phrase
></textobject>
</mediaobject>
</figure>
<para
>Hay varias formas de acceder a una repositorio CVS: puede hacerse mediante autenticación con contraseña (:pserver:), mediante ssh (usando :ext:), mediante repositorio local (:local:), &etc;. El formato para la localización del repositorio es el siguiente (los parámetros opcionales se señalan entre corchetes): </para>
<para>
<filename
>[:método:][[usuario][:contraseña]@]nombrehost[:[puerto]]/ruta/al/repositorio</filename>
</para>
<para
>No todos estos parámetros son siempre obligatorios. La información de acceso necesaria depende de la forma de acceso que puede clasificarse en: </para>
<variablelist>
<varlistentry>
<term
>Local</term>
<listitem>
<para
>El método de acceso local es el usado por omisión en &CVS; con lo cual no es necesario que indique expresamente el método :local:, puede simplemente añadir la ruta al directorio que contiene el repositorio &CVS; y al que se puede acceder desde su ordenador como <filename class="directory"
>/ruta/al/repositorio</filename
>. Un ejemplo real sería: <filename class="directory"
>/home/cvs</filename
>.</para>
<para
>Puede ser que el repositorio esté situado remotamente en una partición montada a través de <acronym
>NFS</acronym
> pero no importa: si crea un repositorio local es suficiente con que escriba la ruta para llegar a él. </para>
</listitem>
</varlistentry>
<varlistentry id="rsh">
<term
>rsh</term>
<listitem>
<para
>La localización del repositorio es algo similar a <filename
>ext:nombreusaurio@host.url.org:/ruta/al/repositorio</filename
>. </para>
<para
>Este método requiere que tenga una cuenta de usuario en el servidor (en este ejemplo: <systemitem class="systemname"
>host.url.org</systemitem
>) y una shell remota. por omisión, &CVS; utiliza para ello ↱ sin embargo, y debido a sus problemas de seguridad se está usando cada vez más &ssh;. </para>
<para
>Si desea utilizar &ssh; deberá configurar la variable de entorno <envar
>CVS_RSH</envar
> adecuadamente. Esto es muy sencillo con &cervisia;. </para>
<!-- TODO: verify if the above still apply -->
<para
>Observe que &cervisia; no es capaz de negociar una autenticación con el servidor así que deberá asegurarse de que puede hacer login remotamente sin que el servidor solicite una contraseña. Si utiliza una versión clásica de ↱ puede hacer esto creando una archivo <filename
>.rhosts</filename
> en su directorio home con una lista de sistemas fiables (vea la página de ↱). </para>
<para
>Con &ssh; puede hacerlo copiando su clave pública (el archivo <filename
>identity.pub</filename
> de la carpeta <filename
>$<envar
>HOME</envar
>/.ssh/</filename
>) en el servidor. La clave no debe estar encriptada con contraseña (consulte la página de manual de &ssh; y el &CVS;/<acronym
>SSH</acronym
> <acronym
>FAQ</acronym
> en SourceForge). Para asegurarse de la forma exacta de hacerlo, pregunte al administrador del servidor. </para>
</listitem>
</varlistentry>
<varlistentry>
<term
>pserver</term>
<listitem>
<para
>La localización del repositorio es similar a esta: <filename
>:pserver:usuario@host.url.org:/ruta/al/repositorio</filename
> </para>
<para
>Con este método se accede al servidor mediante un protocolo con un sistema de autenticación bastante débil (<literal
>pserver</literal
> viene de password autentification). Antes de poder usarlo necesitará un nombre de usuario y una contraseña que le proporcionará el administrador del &CVS;. Observe que el nombre de usuario de &CVS; no tiene porque coincidir con el que tiene para el sistema. Antes de acceder al &CVS; deberá hacer login en el sistema. </para>
<para
>Los proyectos de código libre suelen permitir acceso anónimo a su CVS, con lo cual podrá fácilmente descargarse el código fuente, modificarlo y crear parches para el repositorio sin necesidad de tener una cuenta en el CVS. En general, el acceso anónimo al CVS es de sólo lectura y se realiza mediante autenticación por contraseña (:pserver:), no podrá subir directamente los cambios que usted realice en el código. </para>
</listitem>
</varlistentry>
</variablelist>
<para
>Una vez que conoce el método de acceso y su localización, podrá añadirlo a la lista de repositorios de &cervisia;. </para>
<procedure>
<title
>Añadir un nuevo repositorio</title>
<step
><para
>Abra el diálogo <guilabel
>Configurar acceso a los repositorios</guilabel
> desde <menuchoice
><guimenu
>Repositorio</guimenu
><guimenuitem
>Repositorios...</guimenuitem
> </menuchoice
>. </para
></step>
<step
><para
>Pulse el botón <guilabel
>añadir</guilabel
> para abrir el diálogo <guilabel
>Añadir repositorio</guilabel
>. </para
></step>
<step
><para
>Introduzca la localización el repositorio en el cuadro de texto <guilabel
>Repositorio</guilabel
>. &cervisia; deshabilitará las áreas del diálogo que no sean aplicables al método de acceso señalado. </para
></step>
<step
><para
>Si usa el método ext para acceder al repositorio, introduzca el intérprete de órdenes remoto que desee usar (⪚ &ssh;) en el cuadro de texto <guilabel
>Usar shell remota</guilabel
>. </para
></step>
<step
><para
>Pulse <guibutton
>Aceptar</guibutton
>. Verá el repositorio que acaba de introducir en la lista. </para
></step>
<step
><para
>Si el método de acceso de ese nuevo repositorio es mediante contraseña (pserver), necesitará identificarse antes de conectarse al servidor. Pulse sobre dicho servidor para seleccionarlo y pulse el botón <guilabel
>Acceder</guilabel
>. Introduzca su contraseña en la ventana emergente. </para>
<para
>Si todo ha ido bien, verá que la columna de <guilabel
>Estado</guilabel
> del repositorio en cuestión cambia de <guilabel
>Sin acceso</guilabel
> a <guilabel
>Dentro del sistema</guilabel
>. </para
></step>
<step
><para
>Pulse <guibutton
>Aceptar</guibutton
> para que surjan efecto estas modificaciones o siga añadiendo repositorios a la lista. &cervisia; puede almacenar tantos como desee. </para
></step>
</procedure>
</sect1>
<sect1 id="importing">
<title
>Importar un módulo al repositorio</title>
<para
>En esta sección veremos como introducir un nuevo proyecto en el repositorio &CVS;. Si sólo quiere trabajar en un proyecto que ya está en él, puede saltarse esta sección. </para>
<para
>Hay dos formas de incorporar un proyecto a &CVS;: </para>
<itemizedlist>
<listitem
><para
>Importar los archivos y carpetas a un nuevo <firstterm
>módulo</firstterm
> mediante el diálogo de importación de &cervisia;. Los módulos son las principales carpetas del árbol de directorios del &CVS;, sirven para separar y organizar los distintos proyectos existentes en el repositorio. </para
></listitem>
<listitem
><para
>Crear un módulo vacío y añadir manualmente los nuevos archivos y carpetas. Tendrá un mejor control sobre el proceso aunque también le llevará más tiempo. </para
></listitem>
</itemizedlist>
<important>
<para
>Recuerde que &CVS; fue diseñado para gestionar archivos de texto, muchas de sus funciones como p. ej. combinar los cambios de varios miembros, crear archivos de diferencias, &etc; sólo pueden hacerse sobre archivos de texto. Esto no quiere decir que no pueda usar CVS para gestionar archivos binarios, sólo que si lo hace debe <emphasis
>indicar expresamente si un archivo es binario</emphasis
>. Si no casi con toda seguridad &CVS; corromperá esos archivos. </para>
</important>
<para
>Importar un proyecto (como un nuevo módulo) tiene una serie de ventajas: usted importa recursivamente todos los archivos y directorios y el módulo se creará automáticamente, así importar grandes proyectos al repositorios es una tarea muy sencilla. Existen también algunas desventajas como no poder utilizar el diálogo de importación de &cervisia; para añadir archivos a los módulos existentes y se importarán archivos de texto y binarios. Puede evitar ese problema creando carpetas que sólo contengan un tipo de archivo o estableciendo el patrón de archivos a ignorar durante la importación. </para>
<para
>Por ejemplo, suponga que su proyecto sólo contiene archivos de texto e imágenes PNG (que son binarios). Puede indicarle a &CVS; que ignore todos los archivos que sigan el patrón <filename class="extension"
>*.png</filename
> mientras importa los demás archivos como texto, o puede mover las imágenes a una carpeta separada, y a continuación importar los archivos restantes (como archivos de texto). De cualquier forma, debe <link linkend="checkingout"
>descargar</link
> el módulo que se acaba de importar a la copia de trabajo nueva, copiando los archivos y carpetas que falten copiándolos, <link linkend="addingfiles"
>añadir</link
> y <link linkend="committingfiles"
>enviarlos</link
> al repositorio para completar el proceso de importación. </para>
<para
>Una posible alternativa consiste en añadir manualmente los archivos y carpetas creando un módulo vacío para ellos. Para añadir un módulo vacío al repositorio, cree una carpeta nueva a la carpeta raíz del repositorio de &CVS;. El nombre de esta carpeta nueva será el nombre del módulo. <link linkend="checkingout"
>Descargue</link
> el nuevo módulo vacío. A continuación copie los archivos y carpetas a la copia de trabajo, <link linkend="addingfiles"
>añada</link
> y <link linkend="committingfiles"
>envíe</link
> para subir los nuevos archivos al repositorio de &CVS;. </para>
<figure id="screenshot-import" float="1">
<title
>Captura de pantalla del diálogo de importación de &cervisia;</title>
<mediaobject>
<imageobject
><imagedata format="PNG" fileref="import.png"/></imageobject>
<textobject
><phrase
>Captura de pantalla del diálogo de importación de &cervisia;</phrase
></textobject>
</mediaobject>
</figure>
<para
>En <xref linkend="screenshot-import"/> puede ver el diálogo que le permitirá <emphasis
>importar</emphasis
> el proyecto a un módulo. Para abrir ese diálogo en &cervisia;, seleccione <menuchoice
><guimenu
>Repositorio</guimenu
><guimenuitem
>Importar</guimenuitem
></menuchoice
>. </para>
<variablelist>
<varlistentry>
<term
><guilabel
>Repositorio</guilabel
> <xref linkend="co-repository"/></term>
<listitem
><para
>Seleccione el nombre del repositorio &CVS; de la lista, también representado por la variable <envar
>CVSROOT</envar
>. Deberá haber sido creado previamente y disponer de permiso de escritura. Si aún no hubiera sido creado, podrá hacerlo seleccionando <menuchoice
><guimenu
>Repositorio</guimenu
><guimenuitem
>Crear</guimenuitem
></menuchoice
>. </para>
<para
>La pestaña de selección muestra la lista de repositorios que ha introducido previamente mediante el cuadro <guilabel
>Configurar acceso a los repositorios</guilabel
>. Si el repositorio está situado en otra máquina, asegúrese de que la autenticación funciona correctamente. Para más información vea <xref linkend="accessing-repository"/>. </para
></listitem>
</varlistentry>
<varlistentry>
<term
><guilabel
>Módulo</guilabel
> <xref linkend="co-module"/></term>
<listitem
><para
>El nombre del módulo bajo el que se guardará el proyecto. Después de la importación, podrá descargarse el proyecto usando ese nombre. Para más información vea <xref linkend="checkingout"/>. Este nombre también corresponde al de su correspondiente carpeta en el repositorio. </para
></listitem>
</varlistentry>
<varlistentry>
<term
><guilabel
>Directorio de trabajo</guilabel
></term>
<listitem
><para
>Directorio principal del proyecto a importar. La importación comienza en ese directorio y desciende recursivamente. </para
></listitem>
</varlistentry>
<varlistentry>
<term
><guilabel
>Etiqueta del vendedor</guilabel
> <xref linkend="co-vendortag"/></term>
<listitem
><para
>Históricamente, se usaba para seguir la pista del código aportado por terceras personas. Puede usar su propio nombre si no se le ocurre nada mejor, no tiene mayor importancia. </para
></listitem>
</varlistentry>
<varlistentry>
<term
><guilabel
>Etiqueta de publicación</guilabel
> <xref linkend="co-releasetag"/></term>
<listitem
><para
>Esta etiqueta también se usaba históricamente para importar distintas versiones de código de tercera partes. Si no es su caso, utilice la palabra <literal
>inicio</literal
> o la cadena <literal
> FOO_1_0</literal
> donde <literal
>FOO</literal
> sería el nombre de su proyecto y <literal
>1.0</literal
> la versión. </para
></listitem>
</varlistentry>
<varlistentry>
<term
><guilabel
>Archivos ignorados:</guilabel
></term>
<listitem
><para
>Si rellena ese campo, se introducirá una nueva opción <option
>-l<replaceable
>nombre archivos</replaceable
></option
> al comando <command
>cvs import</command
>. Esta entrada debe contener una lista de patrones de nombres de archivo,separados por espacios, que deben ser ignorados. Una solución más limpia y menos propensa a error para controlar qué archivos se importan es crear un directorio donde sólo estén los archivos a importar y comenzar desde ahí. Pese a ello, este campo puede resultar útil en proyectos que contienen archivos ignorados por omisión por &CVS;, p.ej los archivos <filename
>core</filename
>, en cuyo caso introduzca simplemente el carácter <literal
>!</literal
> para que no se consideren las opciones por omisión de &CVS; para ignorar archivos. Vea <xref linkend="ignoredfiles"/>. </para
></listitem>
</varlistentry>
<varlistentry>
<term
><guilabel
>Comentarios:</guilabel
> <xref linkend="co-comment"/></term>
<listitem
><para
>Utilice es campo para guardar comentarios sobre el origen , uso, desarrollo, &etc; de los archivos que está importando. </para
></listitem>
</varlistentry>
<varlistentry>
<term
><guilabel
>Importar como binario</guilabel
></term>
<listitem
><para
>Si marca esta casilla, se importarán todos los archivos como binarios, esto es, se añadiría el argumento <option
>-kb</option
> al comando <command
>cvs import</command
>. </para
></listitem>
</varlistentry>
<varlistentry>
<term
><guilabel
>Utilizar la hora de modificación del archivo como la de importación</guilabel
></term>
<listitem
><para
>Si marca esta casilla, se considerará la hora de importación como la de modificación del archivo en lugar de considerar la propia de importación. </para
></listitem>
</varlistentry>
</variablelist>
<para
>Una vez que ha rellenado los campos y pulsado <guibutton
>Aceptar</guibutton
>, se ejecutara el siguiente comando de &CVS;:</para>
<screen
><command
>cvs</command
> -d <co id="co-repository"
></co
><replaceable
>repositorio</replaceable
> import -m "<co id="co-comment"
></co
>" <co id="co-module"
></co
><replaceable
>módulo</replaceable
> <co id="co-vendortag"
></co
><replaceable
>etiqueta del vendedor</replaceable
> <co id="co-releasetag"
></co
><replaceable
>etiqueta de la publicación</replaceable
></screen>
</sect1>
<sect1 id="checkingout">
<title
>Descargar un módulo del repositorio</title>
<para
>Una vez que ha configurado correctamente la localización de su repositorio e importado los primeros archivos es hora de descargar el módulo para crear su copia de trabajo. </para>
<para
>También deberá conocer el nombre de la <firstterm
>rama</firstterm
> y la <firstterm
>etiqueta</firstterm
> que desea. </para>
<para
>Las ramas de un módulo son versiones paralelas del mismo. Un ejemplo real de su uso sería la publicación de un proyecto de software. Después de una publicación importante, habrá fallos en el código que será necesario arreglar sin embargo los desarrolladores también querrán añadir nuevas características. Es muy difícil hacer esto al mismo tiempo debido a que la nuevas características también introducirán nuevos fallos dificultando el seguimiento de los más antiguos. Para resolver este problema, &CVS; permite crear una versión paralela que llamaremos "rama de la versión estable" dónde sólo es posible entregar soluciones a los fallos existentes, mientras que prosigue el desarrollo del software en la rama principal (HEAD) </para>
<para
>Las etiquetas se usan para marcar una determinada versión de un proyecto. &CVS; utiliza esto para marcar los archivos así, si descarga o actualiza a una etiqueta concreta siempre tendrá la misma versión de los archivos. En contraste con las ramas, las etiquetas son inamovibles, no es posible desarrollar una etiqueta. Son útiles para señalar publicaciones, grandes cambios en el código, &etc;, gracias a ellas es sencillo devolver el proyecto a una fecha o estado anterior, reproducir y hacer un seguimiento de las fallos, volver a generar el código de una determinada versión, &etc;. </para>
<figure id="screenshot-checkout" float="1">
<title
>Captura de pantalla del diálogo de descarga de &cervisia;</title>
<mediaobject>
<imageobject
><imagedata format="PNG" fileref="checkout.png"/></imageobject>
<textobject
><phrase
>Captura de pantalla del diálogo de descarga de &cervisia;</phrase
></textobject>
</mediaobject>
</figure>
<variablelist>
<varlistentry>
<term
><guilabel
>Repositorio</guilabel
></term>
<listitem
><para
>Nombre del repositorio &CVS;, también conocido como <filename
><envar
>$CVSROOT</envar
></filename
>. El menú desplegable le mostrará la lista de repositorios que ha introducido previamente mediante el cuadro de diálogo <guilabel
>Configurar acceso a los repositorio</guilabel
>. Si el repositorio es remoto asegúrese de que la autenticación es posible. Para más información vea <xref linkend="accessing-repository"/>. </para
></listitem>
</varlistentry>
<varlistentry>
<term
><guilabel
>Módulo</guilabel
></term>
<listitem
><para
>Nombre del módulo a descargar. Si está trabajando en un repositorio ya existente seguramente el administrador le pueda dar ese nombre o bien, si el proyecto es de código libre, su nombre seguramente esté en su web. Si quiere crear un nuevo módulo partiendo de cero con los archivos de su repositorio local sólo necesitará crear una carpeta en el directorio principal del repositorio. El nombre de esa carpeta debe ser el mismo que el del módulo. </para>
<para
>Si el repositorio tiene un archivo <filename
><envar
>$CVSROOT</envar
>/módulos</filename
>, podrá ver una lista de los módulos disponibles pinchando sobre <guibutton
>Buscar lista</guibutton
> </para>
<para
>Observe que es posible descarga cualquier subdirectorio del módulo independientemente del resto del módulo, únicamente debe señalar la ruta a dicha subdirectorio. Por ejemplo, si sólo quiere bajar la subdirectorio <filename class="directory"
>doc/cervisia</filename
> del módulo tdesdk, escriba <filename class="directory"
>tdesdk/doc/cervisia</filename
>. </para
></listitem>
</varlistentry>
<varlistentry>
<term
><guilabel
>Etiqueta de la rama:</guilabel
></term>
<listitem
><para
>Nombre de la rama o etiqueta que quiere descargar. Si deja ese campo vacío, &cervisia; descargará la rama principal (HEAD). </para
></listitem>
</varlistentry>
<varlistentry>
<term
><guilabel
>Directorio de trabajo:</guilabel
></term>
<listitem
><para
>La carpeta en la cual se descargará el módulo. Observe que el directorio principal de la copia de trabajo recibe el mismo nombre que el módulo a descargar salvo que haya indicado otra cosa en el campo <guilabel
>Directorio de trabajo</guilabel
>. </para
></listitem>
</varlistentry>
<varlistentry>
<term
><guilabel
>Descargar como:</guilabel
></term>
<listitem
><para
>Hace que los archivos de la copia de trabajo se descarguen en otra carpeta dentro del directorio de trabajo en lugar de hacerlo en la del mismo nombre que el módulo. </para
></listitem>
</varlistentry>
<varlistentry>
<term
><guilabel
>Exportar sólo</guilabel
></term>
<listitem
><para
>Si marca esa casilla, los archivos se exportarán en lugar de descargarse. La diferencia es que al exportar no se descargan las carpetas de administración del CVS, esto es útil p.ej. al preparar el código fuente para una próxima publicación. </para
></listitem>
</varlistentry>
</variablelist>
</sect1>
<sect1 id="mainscreen">
<title
>Ventana principal mostrando el estado de los archivos y actualizando.</title>
<para
>Cuando inicia &cervisia; y abre un archivo de la copia de trabajo seleccionado <menuchoice
><guimenu
>Archivo</guimenu
><guimenuitem
>Abrir directorio de trabajo</guimenuitem
></menuchoice
> puede ver dos partes en la ventana principal: la superior es un vista en árbol del directorio actual de trabajo, la inferior se usa para mostrar los comandos de &CVS; que ejecuta &cervisia; para realizar las tareas que le indicamos así como la salida de los mismos. </para>
<para
>por omisión, &cervisia; no muestra los archivos que contienen las subdirectorio por lo que tendrán que pinchar sobre ellas si quiere verlos. Para ver todos los archivos de la copia de trabajo, seleccione <menuchoice
><guimenu
>Ver</guimenu
><guimenuitem
>Desplegar árbol de archivos</guimenuitem
></menuchoice
>. Para plegar de nuevo el árbol seleccione <menuchoice
><guimenu
>Ver</guimenu
><guimenuitem
>Plegar árbol de archivos</guimenuitem
></menuchoice
>. </para>
<para
>De acuerdo con la configuración de <filename
>.cvsignore</filename
>, los archivos que no desea que se incluyan en el repositorio no se muestran en el árbol de archivos. Par cada archivo visible podrá ver su estado, por omisión éste se estable a "desconocido" debido a que &cervisia; retrasa la obtención de información hasta que seleccione los archivos y carpetas cuyo estado quiere actualizar o ver y seleccione <menuchoice
><guimenu
>Archivos</guimenu
><guimenuitem
>Actualizar</guimenuitem
></menuchoice
> o <menuchoice
><guimenu
>Archivo</guimenu
><guimenuitem
>Estado</guimenuitem
></menuchoice
>. De esta forma dispondrá de un mínimo de funcionalidad aunque no esté conectado permanentemente al servidor &CVS;. </para>
<figure id="screenshot-mainview" float="1">
<title
>Captura de pantalla de la vista principal de &cervisia;</title>
<mediaobject>
<imageobject
><imagedata format="PNG" fileref="mainview.png"/></imageobject>
<textobject
><phrase
>Captura de pantalla de la vista principal de &cervisia;</phrase
></textobject>
</mediaobject>
</figure>
<para
>Las órdenes del menú Archivo solo suelen actuar sobre los archivos marcados. También puede marcar carpetas. A continuación seleccione <menuchoice
> <guimenu
>Archivo</guimenu
> <guimenuitem
>Estado</guimenuitem
> </menuchoice
> o pulse <keycap
>F5</keycap
>. &cervisia; ejecutará la siguiente orden: </para>
<para>
<screen
><command
>cvs update -n <replaceable
>nombre archivos</replaceable
></command
></screen>
</para>
<para
>para recabar información sobre el estado de los archivos señalados. Observe que &cervisia; sólo recorrerá recursivamente las subdirectorios si tiene seleccionada la pertinente opción en el menú <guimenu
>Preferencias</guimenu
>. Ahora podrá ver el estado de cada archivo en la columna de <guilabel
>Estado</guilabel
>. </para>
<variablelist>
<varlistentry>
<term
><guilabel
>Modificados localmente</guilabel
></term>
<listitem
><para
>Quiere decir que ha modificado localmente el archivo respecto de la versión del repositorio. </para
></listitem>
</varlistentry>
<varlistentry>
<term
><guilabel
>Añadido localmente</guilabel
></term>
<listitem
><para
>Significa que tiene pendiente de entrega un archivo que no existe en el repositorio pero sí en su copia local. El archivo en cuestión sólo aparecerá en el CVS después de realizar la entrega. </para
></listitem>
</varlistentry>
<varlistentry>
<term
><guilabel
>Eliminado localmente</guilabel
></term>
<listitem
><para
>Significa que ha borrado un archivo de su copia local pero aún sigue existiendo en el repositorio. Sólo se eliminará después de realizar una entrega. </para
></listitem>
</varlistentry>
<varlistentry>
<term
><guilabel
>Necesita actualizar</guilabel
></term>
<listitem
><para
>Aparece cuando existe una versión más reciente de ese archivo en el repositorio, p. ej. porque otra persona ha estado trabajando sobre él. En general querrá actualizar su copia local para tener siempre la versión más actual de todos los archivos. </para
></listitem>
</varlistentry>
<varlistentry>
<term
><guilabel
>Necesita parcheado</guilabel
></term>
<listitem
><para
>Muy similar al anterior sólo que al actualizarse no se transfiere todo el archivo sino sólo un parche con los cambios. </para
></listitem>
</varlistentry>
<varlistentry>
<term
><guilabel
>Necesita combinarse</guilabel
></term>
<listitem
><para
>Indica que deben combinarse la revisión que usted ha hecho en su copia local y la versión del repositorio. Esto suele ocurrir cuando ha modificado un archivo al mismo tiempo que otra persona. Si decide actualizar, se combinarán las modificaciones del repositorio con las suyas. En caso de conflicto (que alguien haya modificado las mismas líneas que usted) el nuevo estado del archivos será "Conflicto". </para
></listitem>
</varlistentry>
<varlistentry>
<term
><guilabel
>Actualizado</guilabel
></term>
<listitem
><para
>Indica que el archivo es idéntico a la versión del repositorio. </para
></listitem>
</varlistentry>
<varlistentry>
<term
><guilabel
>Conflicto</guilabel
></term>
<listitem
><para
>Se muestra si el archivo sigue teniendo conflictos con la versión del CVS. Seguramente haya actualizado previamente el archivo sin resolver los conflictos. </para
></listitem>
</varlistentry>
<varlistentry>
<term
><guilabel
>No presente en el CVS</guilabel
></term>
<listitem
><para
>Indica que el archivo no figura en el repositorio &CVS;. Si quiere que esté disponible para los demás, debe añadirlo al repositorio y si no lo desea debería añadir su nombre en el archivo <filename
>.cvsignore</filename
>. </para
></listitem>
</varlistentry>
</variablelist>
<para
>Una vez que se ha hecho una idea del estado actual del CVS es posible que desee actualizarse. Seleccione algunos archivos (o carpetas lo que equivale a seleccionar todos los archivos que contienen). A continuación seleccione <menuchoice
><guimenu
>Archivo</guimenu
> <guimenuitem
>Actualizar</guimenuitem
> </menuchoice
> (por supuesto, puede hacerlo al principio de la sesión). Alguno de los archivos cambiará de estado. En general, se actualizan los archivos señalados como «Necesita ser parcheado» o «Necesita actualizar», lo que hace que puedan darse los siguientes casos en la columna de estado: </para>
<variablelist>
<varlistentry>
<term
><guilabel
>Actualizado</guilabel
></term>
<listitem
><para
>Se muestra cuando el archivo se actualizó a la versión del repositorio. </para
></listitem>
</varlistentry>
<varlistentry>
<term
><guilabel
>Parchado</guilabel
></term>
<listitem
><para
>Indica que el servidor &CVS; envió un parche para ese archivo y ha sido aplicado correctamente. Si no se ha conseguido aplicar debido a un conflicto entre sus modificaciones y las que otra persona ha enviado el estado para a ser <guilabel
>Conflicto</guilabel
>. </para
></listitem>
</varlistentry>
</variablelist>
<para
>Seguramente habrá notado que según el estado de un archivo, su fila tiene un color diferente. Los colores corresponden a la prioridad dada a cada estado. Por ejemplo: un archivo con un conflicto se marca en rojo debido a que tendrá que resolver dicho conflicto antes de seguir trabajando sobre él. Si su directorio contiene un gran número de archivos, es posible que le resulte más complicado tener una visión de conjunto. Para tener información más exacta acerca de qué archivos están en un estado inusual simplemente pinche sobre el encabezado de la columna <guilabel
>Estado</guilabel
>. Ahora se listarán los archivos por orden de prioridad con lo que tendrá toda la información importante en la parte superior de la lista. Para volver al orden alfabético pinche sobre el encabezado de la columna <guilabel
>Nombre de archivo</guilabel
>. </para>
</sect1>
</chapter>
<chapter id="workingwithfiles">
<title
>Trabajar con los archivos</title>
<para
>Es posible acceder a las funciones más comunes de &CVS; directamente desde la vista principal de &cervisia;. Los comnados suelen ejecutarse en todos los archivos seleccionados. Si tiene seleccionada alguna carpeta, el comportamiento variará según el menú <guimenu
>preferencias</guimenu
>. Por ejemplo, si tiene marcada la casilla <menuchoice
><guimenu
>preferencias</guimenu
><guimenuitem
>Enviar y eliminar recursivamente</guimenuitem
></menuchoice
> y escoge <menuchoice
><guimenu
>archivo</guimenu
><guimenuitem
>enviar</guimenuitem
></menuchoice
> cuando tenga seleccionada una carpeta, se enviarán todos los archivos de esa carpeta así como los contenidos por otras dentro de ella. Si no la tiene marcada, sólo se enviarán los archivos de la carpeta seleccionada. </para>
<figure id="screenshot-popup" float="1">
<title
>Captura de pantalla de un menú contextual de &cervisia;</title>
<mediaobject>
<imageobject
><imagedata format="PNG" fileref="popup.png"/></imageobject>
</mediaobject>
</figure>
<para
>Las funciones más frecuentes también están disponibles pulsando con el botón derecho sobre la vista en árbol, a través del menú contextual. <xref linkend="screenshot-popup"/> que muestra el menú contextual de &cervisia;. </para>
<para
>Para editar un archivo simplemente realice una doble pulsación sobre él o selecciónelo y pulse &Enter;. El archivo se abrirá en la aplicación que KDE tenga configurada para ese tipo. Si no desea abrir el archivo en esa aplicación puede hacer una doble pulsación sobre el archivo y seleccionar <menuchoice
> <guisubmenu
>Editar con</guisubmenu
> </menuchoice
> y seleccionar una de las aplicacione que manejan este tipo de archivo. </para>
<sect1 id="addingfiles">
<title
>Añadir archivos</title>
<para
>Puede añadir archivos a un proyecto en dos pasos: primero será necesario que &CVS; sepa que existen, es decir, <emphasis
>entregarlos</emphasis
> al repositorio. Este método tiene una ventaja importante: puede entregar archivos conjuntamente con modificaciones realizadas en otras áreas del proyecto. Al hacer esto, es fácil ver que esos cambios son parte de un todo. </para>
<para
>Para terminar, seleccione todos los archivos que quiere añadir en la ventana principal de &cervisia;. Luego seleccione <menuchoice
><guimenu
>Archivo</guimenu
><guimenuitem
>Añadir al repositorio</guimenuitem
></menuchoice
> o pinche con el botón derecho sobre los archivos seleccionados y seleccione <guimenuitem
>Añadir al repositorio</guimenuitem
>, verá el diálogo <guilabel
>Añadir al CVS</guilabel
> que le mostrará los archivos seleccionados. Pulse <guibutton
>Aceptar</guibutton
>. </para>
<para
>&cervisia; ejecutará el siguiente comando:</para>
<para>
<screen
><command
>cvs add <replaceable
>nombre archivos</replaceable
></command
></screen>
</para>
<para
>Si todo ha ido bien, la columna de estado debe señalar "Añadido al repositorio" para todos los archivos que hemos señalado. </para>
<warning
><para
>&CVS; no está diseñado para permitir un exhaustivo control de las revisiones de los archivos binarios, p.ej. normalmente carece de sentido combinar cambios entre archivos binarios. Además, &CVS; autocompleta por omisión la palabras clave ( en la cade⪚na <literal
>$Revision 1.6$</literal
>) cada vez que se le entrega un archivo. Si se hace esto en un archivo binario probablemente deje de ser utilizable. </para
></warning>
<para
>Para evitar todos estos problemas, debe asegurarse al enviar archivos binarios (como imágenes PNG o archivos postscript) de seleccionar <menuchoice
><guimenu
>Archivo</guimenu
><guimenuitem
>Añadir binario</guimenuitem
></menuchoice
>. Verá el diálogo <guilabel
>Añadir al CVS</guilabel
> donde se listarán los binarios que haya seleccionado y se le pedirá confirmación. Pulse <guibutton
>Aceptar</guibutton
>. </para>
<para
>&cervisia; ejecutará el siguiente comando: </para>
<para>
<screen
><command
>cvs add -kb <replaceable
>nombre archivos</replaceable
></command
></screen>
</para>
</sect1>
<sect1 id="removingfiles">
<title
>Eliminar archivos</title>
<para
>Al igual que cuando los añadimos, al eliminar archivos también necesitaremos dos pasos: primero necesitamos que el servidor tenga constancia de que los queremos eliminar, para ellos seleccionamos <menuchoice
><guimenu
>Archivo</guimenu
><guimenuitem
>Eliminar del repositorio</guimenuitem
></menuchoice
> o <guimenuitem
>Eliminar del repositorio</guimenuitem
> desde el menú contextual. Aparecerá el diálogo <guilabel
>Eliminar del CVS</guilabel
> listando los archivos seleccionados. Pulse <guibutton
>Aceptar</guibutton
>. &cervisia; ejecutará la siguiente orden: </para>
<para>
<screen
><command
>cvs remove -f <replaceable
>nombre archivos</replaceable
></command
></screen>
</para>
<para
>Después de eso, deberá entregarse esa modificación quizás junto a otras modificaciones. </para>
<note
><para
>Este comando sólo funciona si el archivo está actualizado. Aunque pueda parecer un detalle sin importancia, piense que si el archivo se modificó desde la última vez es porque alguien aún está trabajando en él y posiblemente deba reconsiderar descartarlo. </para
></note>
</sect1>
<sect1 id="addingremovingdirs">
<title
>Añadir y eliminar directorios</title>
<para
>&CVS; gestiona las carpetas de modo distinto a los archivos. Éstos carecen de control de revisiones, es decir, no puede saber qué directorios existían en el proyecto en un momento dado. Por ello no es posible eliminar expresamente directorios, salvo que lo hagamos directamente en el repositorio. </para>
<para
>Siguiendo esto, &CVS; considera los directorios vacíos como inexistente. Podemos obligarle a eliminarlos usando la opción <option
>-P</option
><command
>cvs update</command
> y <command
>cvs checkout</command
>. Esto puede configurarse en el menú <menuchoice
><guimenu
>Preferencias</guimenu
><guimenuitem
>Eliminar directorios vacíos al actualizar</guimenuitem
></menuchoice
>. </para>
<para
>Es posible añadir un directorio al repositorio seleccionando <menuchoice
><guimenu
>Archivo</guimenu
><guimenuitem
>Añadir al repositorio</guimenuitem
></menuchoice
> o bien pulsando con el botón derecho sobre la carpeta seleccionada y eligiendo <guimenuitem
>Añadir al repositorio</guimenuitem
> en el menú contextual. Observe que a diferencia del proceso de añadir archivos, al añadir directorios no es necesario realizar una entrega posterior. &cervisia; ejecutará la orden: </para>
<para>
<screen
><command
>cvs add <replaceable
>nombredir</replaceable
></command
></screen>
</para>
</sect1>
<sect1 id="committingfiles">
<title
>Enviar archivos</title>
<para
>Una vez que ha realizado un cierto número de cambios en su copia local y quiere que otros miembros accedan a su trabajo, deberá <emphasis
>entregarlos</emphasis
>. Al entregar los cambios, lo que hace es situar su propia versión de los archivos modificados como nuevas revisiones en el repositorio. Cuando otro miembro actualice su copia local recibirá (entre otros) los cambios que usted ha realizado. </para>
<para
>Para entregar un par de archivos, márquelos en la ventana principal de &cervisia; y seleccione <menuchoice
><guimenu
>Archivos</guimenu
><guimenuitem
>Entregar</guimenuitem
></menuchoice
> o pinche con el botón derecho los archivos marcados y seleccione <guimenuitem
>Entregar</guimenuitem
> en el menú contextual. </para>
<figure id="screenshot-commit" float="1">
<title
>Captura de pantalla del diálogo de entrega de &cervisia;.</title>
<mediaobject>
<imageobject
><imagedata format="PNG" fileref="commit.png"/></imageobject>
</mediaobject>
</figure>
<para
>Verá un diálogo con una lista de los archivos seleccionados en la parte superior y los mensajes de registro en la parte inferior. &cervisia; le ayudará de varias formas a encontrar un mensaje de registro con significado: puede hacer doble click o pulsar <keycap
>Intro</keycap
> sobre un archivo para ver lo cambios que ha realizado en el mismo, puede ver una lista de los mensajes de registro que ha usado y también se ha integrado este diálogo en el editor de cambios de &cervisia;. Cuando haya terminado, se ejecutará el siguiente comando: </para>
<para>
<screen
><command
>cvs commit -m <replaceable
>mensaje</replaceable
> <replaceable
>nombres de archivos</replaceable
></command
></screen>
</para>
<para
>a tal fin. </para>
<note
><para
>Un error frecuente al entregar archivos es <errorname
>Falló la comprobación de actualización</errorname
>. Esto indica que alguien ha entregado cambios al repositorio desde la última vez que usted se ha actualizado, más técnicamente: su revisión <literal
>BASE</literal
> no es la más reciente existente. En este caso, &CVS; no aceptará sus cambios hasta que se actualice, resuelva los posibles conflictos y realice una nueva entrega. Si está trabajando en un proyecto de software, es una norma de cortesía comprobar que el programa funciona después de introducir sus cambios ya que es posible que sus cambios no sean compatibles con los introducidos por otras personas aunque no existan conflictos en el mismo archivo. </para
></note>
<note>
<para
>Otro error frecuente es <errorname
>La etiqueta inamovible 'X' para el archivo 'X' no es una rama</errorname
>. Esto ocurre si intenta enviar un archivo al que previamente le ha asignado un determinado número de revisión o etiqueta con el comando </para>
<para>
<screen
><prompt
>%</prompt
><userinput
>cvs update -r X</userinput
></screen>
</para>
<para
>( usado ⪚ en <menuchoice
><guimenu
>Avanzado</guimenu
><guimenuitem
>Actualizar a etiqueta/fecha</guimenuitem
></menuchoice
>). En cuyo caso, la etiqueta del archivo es inamovible, esto que que las siguientes actualizaciones no descargarán la versión más reciente de la rama. Si necesita entregar versiones posteriores a esa rama, antes deberá actualizarse a la versión más reciente de la misma. </para>
</note>
<para
>Con &cervisia; es bastante fácil mantener un archivo con los registros de cambios acorde con las normas de programación de GNU. Para usarlo, seleccione <menuchoice
><guimenu
>Archivo</guimenu
><guimenuitem
>Insertar entrada de registro de cambios</guimenuitem
></menuchoice
>. Si ya existe un archivo llamado <filename
>ChangeLog</filename
> en el directorio principal de su copia local, éste se cargará y podrá editarlo, al principio del mismo se introducirá una entrada con la fecha actual y su nombre de usuario (puede configurar esto en <xref linkend="customize-general"/>). Una vez que pulse <guibutton
>Aceptar</guibutton
>, el siguiente diálogo de entrega que abra tendrá el último mensaje introducido en el registro de cambios como mensaje de registro. </para>
</sect1>
<sect1 id="resolvingconflicts">
<title
>Resolución de conflictos</title>
<para
>Si le coincide modificar un archivo al mismo tiempo que otro miembro, es posible que ocurran conflictos que será detectados por &CVS; cuando actualice el archivo. &CVS; intentará combinar los cambios del otro miembro en su copia local. En el caso de que coincidan las líneas cambiadas, &CVS; no los combinará y dará un mensaje de error. </para>
<para
>Podrá ver los archivos con conflictos desde la vista principal de &cervisia;, aparecen marcados como "conflicto" en la columna de estado y resaltados en rojo. Tendrá que resolver los conflictos antes de entregar esos archivos ya que &CVS; no le permitirá entregarlos mientras existan conflictos. También puede resolver conflictos de manera tradicional haciendo doble click sobre el archivos en cuestión y editándolo con su editor favorito.</para>
<para
>&CVS; señala los cambios conflictivos poniendo marcas en la mitad de los archivos de este modo:</para>
<screen
><<<<<<<
Cambios en su copia local
=======
Cambios en el repositorio
>>>>>>> revisión_number
</screen>
<para
>Deberá reemplazar todo este bloque con la nueva versión combinada. Claro está que tiene mucha libertad a la hora de resolver una serie de conflictos: puede escoger una de las dos reversiones y descartar los otros cambios. También puede concluir que en ambos casos los cambios son inadecuados y reescribir usted mismo las funciones e incluso reescribir todo el archivo. </para>
<para
>Afortunadamente, &cervisia; proporciona un útil sistema para resolver estos problemas. Ésto no quiere decir que nunca sea necesario editar los archivos a mano, pero sí que podrá evitarlo para solucionar los conflictos más triviales. Para utilizar el diálogo <guilabel
>Resolver para el CVS</guilabel
>, seleccione <menuchoice
><guimenu
>Archivo</guimenu
><guimenuitem
>Resolver</guimenuitem
></menuchoice
> o pulse con el botón derecho el archivo seleccionado y elija <guimenuitem
>Resolver</guimenuitem
> desde el menú contextual. </para>
<figure id="screenshot-resolve" float="1">
<title
>Captura de pantalla del diálogo de resolución de conflictos de &cervisia;</title>
<mediaobject>
<imageobject
><imagedata format="PNG" fileref="resolve.png"/></imageobject>
<textobject
><phrase
>Captura de pantalla del diálogo de resolución de conflictos de &cervisia;</phrase
></textobject>
</mediaobject>
</figure>
<para
>En la parte superior del diálogo verá ambas versiones del archivo. En la parte izquierda podrá ver <guilabel
>Su versión (A)</guilabel
> del archivo y el la derecha <guilabel
>Otra versión (B)</guilabel
>. La <guilabel
>sección combinada</guilabel
> muestra las partes del archivo que se introducirán en su copia local si pulsa <guibutton
>Aceptar</guibutton
>. </para>
<para
>Podrá avanzar y retroceder a través de las secciones pulsando <guibutton
><<</guibutton
> y <guibutton
>>></guibutton
>. En la parte inferior del diálogo podrá ver qué sección está señalada en cada momento. </para>
<para
>Ahora podrá decidir para cada sección qué versión quiere tener en el archivo combinado. Pulsando <guibutton
>A</guibutton
> se añadirá la versión que ha editado y pulsando <guibutton
>B</guibutton
> la del repositorio. Pulsando <guibutton
>A+B</guibutton
> se añadirán ambas versiones: primero la suya y luego la del repositorio, si pulsa <guibutton
>B+A</guibutton
> también se añadirán las dos aunque primero la del repositorio y luego la suya. </para>
<para
>Si ninguna de las versiones le satisface, pulse <guibutton
>Editar</guibutton
> para modificar esa sección en un editor. Cuando termine pulse <guibutton
>Aceptar</guibutton
> para volver al diálogo <guilabel
>Resolver para el CVS</guilabel
>. Podrá ver la sección que acaba de editar en la <guilabel
>Versión combinada</guilabel
> junto con los cambios introducidos por usted. </para>
<para
>Para guarda sus cambios, sobreescribiendo su versión de la copia de trabajo, pulse <guibutton
>Guardar</guibutton
>. Observe que esto no sólo guardará la sección que está viendo sino todo el archivo. Si quiere guardarlo en otro archivo, pulse <guibutton
>Guardar como</guibutton
>. Pulse <guibutton
>Cerrar</guibutton
> para salir del diálogo. Tenga en cuenta que si lo hace sin guardar los cambios, éstos se perderán. </para>
</sect1>
</chapter>
<chapter id="obtaininginformation">
<title
>Obtener información sobre archivos y crear parches</title>
<sect1 id="diff">
<title
>Observar las diferencias entre revisiones</title>
<para
>En &cervisia; dispone de varios sitios donde poder acceder a una ventana que muestre las diferencias entre las revisiones de un determinado archivo. </para>
<itemizedlist>
<listitem
><para
>Desde la vista principal podrá seleccionar <menuchoice
><guimenu
>Ver</guimenu
><guimenuitem
>Diferencias con el repositorio (BASE)</guimenuitem
></menuchoice
>. Esta función está basada en el comando <command
>cvs diff</command
>, le mostrará las diferencias entre su versión local y la última que actualizó (también conocida como <literal
>BASE</literal
>). Esto es bastante útil antes de entregar un archivo, así podrá luego encontrar fácilmente el mensaje de registro. </para
></listitem>
<listitem
><para
>Podrá ver las diferencias entre su versión local y la de la rama principal de desarrollo (también llamada <literal
>HEAD</literal
>) seleccionando <menuchoice
><guimenu
>Ver</guimenu
><guimenuitem
>Diferencias con el repositorio (HEAD)</guimenuitem
></menuchoice
>. </para
></listitem>
<listitem
><para
>Podrá ver las diferencias entre las dos últimas revisiones del archivo seleccionado, en <menuchoice
><guimenu
>Ver</guimenu
><guimenuitem
>Última modificación</guimenuitem
></menuchoice
>. </para
></listitem>
<listitem
><para
>Podrá acceder a las opciones de menú <guimenuitem
>Diferencias con el repositorio (BASE)</guimenuitem
>, <guimenuitem
>Diferencias con el repositorio (HEAD)</guimenuitem
> y <guimenuitem
>Última modificación</guimenuitem
> con una doble pulsación sobre el archivo en cuestión y seleccionándolos en el menú contextual. </para
></listitem>
<listitem
><para
>Podrá ver una ventana con las diferencias en el diálogo que se muestra cuando entrega una archivo seleccionando el nombre de un archivo ya sea haciendo doble click sobre él o pulsando <keycap
>Intro</keycap
>. Esto es muy similar a seleccionar <menuchoice
><guimenu
>Ver</guimenu
><guimenuitem
>Diferencias con el repositorio</guimenuitem
></menuchoice
> sobre los archivos respectivos en la vista principal. </para
></listitem>
<listitem
><para
>Desde el diálogo de visualización de registros, podrá seleccionar dos revisiones de un archivo y ver las diferencias entre ambos (vea <xref linkend="browsinglogs"/>). </para
></listitem>
</itemizedlist>
<para
>Seguramente habrá notado que &cervisia; no sólo le muestra la salida del comando <command
>diff</command
> sino que la representa gráficamente tal como puede ver en <xref linkend="screenshot-log"/>. </para>
<figure id="screenshot-log" float="1">
<title
>Captura de pantalla del diálogo de diferencias de &cervisia;</title>
<mediaobject>
<imageobject
><imagedata format="PNG" fileref="diff.png"/></imageobject>
<textobject
><phrase
>Captura de pantalla del diálogo de diferencias de &cervisia;</phrase
></textobject>
</mediaobject>
</figure>
<para
>El texto que aparece en el diálogo incorpora una serie de mejoras respecto al que le proporcionaría el comando diff con la opción <option
>-u</option
>. Puede ver ambos archivos en sendas ventanas con las líneas ordenadas de tal modo que pueda fácilmente comparar ambos. Donde se haya borrado o añadido alguna línea , se mostrará el delimitador <literal
>+++++</literal
> en el lado izquierdo de la ventana respectiva. Podrá ver los número de línea en la columna de la izquierda. </para>
<para
>En la segunda columna de la ventana derecha, podrá ver los cambios realizados que pueden ser: <literal
>Añadido</literal
>, <literal
>Borrado</literal
> y <literal
>Modificado</literal
> con las líneas resaltadas en azul, verde y rojo respectivamente. Así, podrá ver rápidamente todos los cambios realizados sobre el archivo. También puede usar la posición de las regiones coloreadas de la imagen comprimida como orientación al usar la barra de desplazamiento. </para>
<para
>Normalmente, las barras de desplazamiento de la izquierda y de la derecha están sincronizadas, es decir que si mueve una, la otra también lo hará. Puede evitar esto marcando la casilla <guibutton
>Sincronizar barras de desplazamiento</guibutton
>. </para>
<para
>Para obtener más información sobre cómo personalizar el diálogo de diferencias vea <xref linkend="customize-diff"/>. </para>
</sect1>
<sect1 id="creatingpatches">
<title
>Crear parches</title>
<para
>Puede querer que alguien revise sus modificaciones antes de entregarlas o quizás carece de una cuenta de acceso en el repositorio. En estos casos, &CVS; proporciona métodos estándar para compartir los cambios que ha hecho y que otras personas puedan revisarlos y eventualmente entregarlos. Los archivos que contienen estos cambios se denominan <firstterm
>parches</firstterm
> y se crean mediante el comando <command
>cvs diff</command
> de igual modo que las diferencias en <xref linkend="diff"/>. El uso de este tipo de archivos disminuye el ancho de banda al ser más pequeños que el archivo completo, además un sólo parche puede contener los cambios de varios archivos. </para>
<para
>&cervisia; le permite acceder a esta característica seleccionando <menuchoice
><guimenu
>Avanzado</guimenu
><guimenuitem
>Crear parche para el repositorio</guimenuitem
></menuchoice
>. </para>
<important
><para
>La acción <guimenuitem
>Crear parche para el repositorio</guimenuitem
> crea un parche con todas las modificaciones realizadas en los archivos de su copia de trabajo respecto de la rama <guimenuitem
>BASE</guimenuitem
> del repositorio. Sin embargo, la selección de archivos en la vista principal no afecta al parche que se generará. </para
></important>
<para
>Otra posibilidad es seleccionar un archivo en la vista principal y seleccionar <guimenuitem
>Ver registro</guimenuitem
> en el menú <guimenu
>Ver</guimenu
> o pulsar con el botón derecho sobre el archivo y seleccionar <guimenuitem
>Ver registro</guimenuitem
> en el menú contextual para que se abra el diálogo <link linkend="browsinglogs"
>Buscar registros</link
>. Ahora deberá seleccionar la versión para la que se quiere crear un parche como revisión «A» y pulsar <guilabel
>Crear parche</guilabel
>. Esto creará un parche con las diferencias de su copia local respecto al <emphasis
>archivo seleccionado</emphasis
> y la versión seleccionada como revisión «A». </para>
<para
>Antes de crear un parche, &cervisia; le muestra un diálogo para que decida el formato de salida. </para>
<figure id="screenshot-patch" float="1">
<title
>Captura de pantalla del diálogo de creación de parches de &cervisia;</title>
<mediaobject>
<imageobject
><imagedata format="PNG" fileref="patch.png"/></imageobject>
<textobject
><phrase
>Captura de pantalla del diálogo de creación de parches de &cervisia;</phrase
></textobject>
</mediaobject>
</figure>
<variablelist>
<varlistentry>
<term
><guilabel
>Formato de salida</guilabel
></term>
<listitem
><para
>Existen tres posibilidades: </para>
<para
><guilabel
>Normal</guilabel
>: puede usarse para hacer que el editor haga automáticamente otra copia del viejo archivo que coincida con el nuevo. Los caracteres < y > señalan los cambios y no dispone de información contextual. </para>
<para
><guilabel
>Unificado</guilabel
>: es el formato más usado. Utiliza líneas contextuales además de los números de línea para registrar las diferencias lo que añade robustez al proceso de aplicar un parche. Esto formato muestra las diferencias en una forma compacta y legible con un encabezado para cada archivo implicado y secciones separadas para cada diferencia. Las líneas contextuales incluidas con cada diferencia hace que sea más sencillo entender los cambios realizados. Los caracteres + y - señalan los cambios. </para>
<para
><guilabel
>Contextual</guilabel
>: contiene la misma información que el unificado pero de forma menos compacta. Los cambios se marcan con el carácter !. </para
></listitem>
</varlistentry>
<varlistentry>
<term
><guilabel
>Cantidad de líneas contextuales:</guilabel
></term>
<listitem
><para
>Ponga aquí el número de líneas contextuales para los formatos unificado y contextual, esta opción no está disponible para el formato normal ya que no contiene información contextual. Cuanta más información contextual esté disponible, más sencilla resultará su lectura y su aplicación aunque se incrementará el tamaño del parche. Es recomendable el uso de al menos dos líneas contextuales. </para
></listitem>
</varlistentry>
<varlistentry>
<term
><guilabel
>Ignorar opciones</guilabel
></term>
<listitem
><para
>Vea aquí los cambios que no deben considerarse como diferencias al generar parches. </para
></listitem>
</varlistentry>
</variablelist>
<para
>Una vez configurado el formato de salida, &cervisia; creará el parche y le mostrará el diálogo <guilabel
>Guardar como</guilabel
>. Introduzca el nombre y la localización del parche. </para>
</sect1>
<sect1 id="annotate">
<title
>Ver un archivo con anotaciones</title>
<para
>Con el comando <command
>cvs annotate</command
>, &CVS; le permite saber para cada línea modificada quien ha sido el último en hacerlo. Esto puede resultar útil para saber quién ha sido el que ha introducido un determinado cambio para contactar con él acerca de cualquier incidencia en esa parte del código. </para>
<para
>&cervisia; le permite ver esta información mejor que en una consola. Para ver una versión anotada, seleccione <menuchoice
><guimenu
>Ver</guimenu
><guimenuitem
>Anotar</guimenuitem
></menuchoice
>. Otra forma es pulsar el botón <guilabel
>Anotar</guilabel
> en el diálogo <link linkend="browsinglogs"
>Buscar registros</link
> donde podrá seleccionar qué versión del archivo quiere ver. En <xref linkend="screenshot-annotate"/> puede ver una captura de pantalla de ese diálogo. </para>
<figure id="screenshot-annotate" float="1">
<title
>Captura de pantalla del diálogo de anotaciones de &cervisia;</title>
<mediaobject>
<imageobject
><imagedata format="PNG" fileref="annotate.png"/></imageobject>
<textobject
><phrase
>Captura de pantalla del diálogo de anotaciones de &cervisia;</phrase
></textobject>
</mediaobject>
</figure>
<para
>En el diálogo de anotaciones, podrá ver una ventana con la última versión del archivo seleccionado (o la revisión "A" de la versión) en caso de que iniciará el diálogo de anotaciones desde el diálogo de <link linkend="browsinglogs"
>Búsqueda de registros</link
>). En la columna anterior al texto, podrá ver información sobre el último cambio de cada línea. En la primer columna se muestra el número de línea, en la segunda el nombre del autor y el número de revisión y, finalmente, en la tercera columna puede ver el contenido actual de la línea. </para>
<para
>En consecuencia, cuando el formato de una determinada línea le parece extraño o cree que contiene algún fallo podrá saber inmediatamente quien es el responsable. También podrá saber <emphasis
>porque</emphasis
> se ha modificado esa línea para lo cual deberá situar el cursos sobre el número de revisión que desee, aparecerá un cuadrito mostrándole el mensaje de registro junto con la fecha del cambio. </para>
</sect1>
<sect1 id="browsinglogs">
<title
>Ver los registros de &CVS;</title>
<para
>Cuando marca un archivo en la vista principal y selecciona <guimenuitem
>Examinar registro</guimenuitem
> desde el menú <guimenu
>Ver</guimenu
> o pulsa con el botón derecho sobre el archivo y seleccione <guimenuitem
>Buscar registro</guimenuitem
> en el menú contextual. Se mostrará el diálogo <guilabel
>Registro de CVS</guilabel
> (si selecciona más de un archivo no ocurrirá nada porque &cervisia; sólo puede mostrar el registro de un archivo al mismo tiempo). Desde aquí no sólo podrá ver el historial del archivo sino que también podrá: </para>
<itemizedlist>
<listitem
><para
>Ver la revisión, autor, fecha, rama, mensaje de entrega y etiquetas para cada versión del archivo seleccionado. </para
></listitem>
<listitem
><para
>Ver una gráfico en árbol de las ramas y etiquetas del archivo seleccionado. </para
></listitem>
<listitem
><para
>Ver cualquier versión del archivo seleccionado (se abrirá con la aplicación por defecto). </para
></listitem>
<listitem
><para
>Ver una versión con anotaciones de cualquier versión del archivo seleccionado. </para
></listitem>
<listitem
><para
>Ver las diferencias sobre dos versiones cualquiera del archivo seleccionado. </para
></listitem>
<listitem
><para
>Crear parches con las diferencias entre dos versiones distintas del archivo seleccionado incluyendo su propia copia local. </para
></listitem>
</itemizedlist>
<figure float="1">
<title
>Captura de pantalla del diálogo del visor de registros de &cervisia;</title>
<mediaobject>
<imageobject
><imagedata format="PNG" fileref="logtree.png"/></imageobject>
<textobject
><phrase
>Captura de pantalla del diálogo del visor de registros de &cervisia;</phrase
></textobject>
</mediaobject>
</figure>
<para
>Podrá ver el historial tal como lo crea el comando <command
>cvs log</command
> (<guilabel
>Salida de CVS</guilabel
>) en forma de <guilabel
>Árbol</guilabel
> o en forma de <guilabel
>Lista</guilabel
>. Obviamente deberá seleccionar aquel que encuentre más cómodo o que, por alguna razón, decida usar. La vista en árbol le dará una representación muy intuitiva del trabajo realizado en las distintas ramas por los distintos miembros. Podrá ver los correspondientes mensajes de registro en forma de cuadritos emergentes (tooltips). La forma de lista es, como su nombre indica, lineal y por tanto no aporta esa visión inmediata de las distintas ramas aunque por también concentra más información relevante en menos espacio. La información que proporciona el CVS es muy completa pero también larga y difícil de leer. Para ahorrarle algunos problemas podrá buscar cadenas de texto de su interés pulsando <guibutton
>Buscar</guibutton
>. </para>
<para
>Para obtener más información acerca de una determinada revisión puede pinchar sobre ella ya sea en la lista o en el árbol. Verá como se rellenan los campos de la parte media del diálogo con la información completa aportada por <command
>cvs log</command
>. Puede ser importante marcar dos revisiones: "A" y "B" en caso de que quiera usar más características de estos botones. Puede seleccionar la revisión "A" con el botón izquierdo del ratón y la revisión "B" con el botón central. También podrá navegar por la lista mediante las teclas del cursor. Para marcar las revisiones "A" y "B", utilice los atajos de teclado <keycombo
><keycap
>Ctrl</keycap
><keycap
>A</keycap
><keycap
>Ctrl</keycap
><keycap
>B</keycap
></keycombo
> respectivamente. Podrá seleccionar revisiones usando la vista <guilabel
>Salida de CVS</guilabel
> y pinchando sobre <guilabel
>Seleccionar revisión A</guilabel
> o <guilabel
>Seleccionar revisión B</guilabel
>. </para>
<para
>Si pulsa el botón <guibutton
>Anotar</guibutton
>, verá un diálogo con el texto del archivo perteneciente a la revisión marcada como "A". Cada línea se precede de la información acerca de quién la editó por última vez y en qué revisión se ha hecho. Tiene más información sobre la vista de anotaciones en <xref linkend="annotate"/>. </para>
<para
>Si pulsa en botón <guibutton
>Diff</guibutton
> se llamará al comando <command
>cvs diff</command
> y se le mostrará un diálogo con todas las modificaciones entre las dos revisiones marcadas. Si marca la revisión "A", pero no la "B", &cervisia; le mostrará las diferencias entre su versión del archivo y la de su copia de trabajo. Así, podrá ver las diferencias entre su versión y cualquier otra presente en el &CVS;. Para facilitarle esa tarea, se usan diferentes colores para resaltar las líneas que han sido añadidas, eliminadas o modificadas, Tiene más información sobre la vista de diferencias en <xref linkend="diff"/>. </para>
<para
>Si pulsa el botón <guibutton
>Crear parche</guibutton
>, verá un diálogo donde podrá configurar las opciones del formato del archivo con las diferencias que se muestran.Si marca la revisión "A", pero no la "B", &cervisia; le mostrará las diferencias entre su versión del archivo y la de su copia de trabajo. sí, podrá crear un parche que muestre las diferencias entre su versión y cualquier otra presente en el &CVS;. Una vez que haya configurado todos los parámetros del diálogo y pulsado <guibutton
>Aceptar</guibutton
>, se ejecutará el comando <command
>cvs diff</command
> para generar el parche. Aparecerá el diálogo <guilabel
>Guardar como</guilabel
>. Para guardarlo, introduzca el nombre de archivo y su localización. Tiene más información sobre creación de parches y sus formatos en <xref linkend="creatingpatches"/>. </para>
<para
>Si pulsa el botón <guibutton
>Ver</guibutton
>, &cervisia; descargará la revisión marcada como "A" y la abrirá con la aplicación asignada por omisión a ese tipo de archivo. </para>
<para
>Pulse <guibutton
>Cerrar</guibutton
> para salir del diálogo y volver a la ventana principal. </para>
<para
>Para generar el mensaje de registro, &cervisia; ejecuta el siguiente comando: </para>
<para>
<screen
><command
>cvs log <replaceable
>nombrearchivos</replaceable
></command
></screen>
</para>
</sect1>
<sect1 id="browsinghistory">
<title
>Ver el historial</title>
<para
>Si el repositorio que utiliza tiene activado el sistema de registro, &cervisia; le mostrará el historial de ciertos eventos tales como descargas, entregas, actualizaciones.... Seleccione <guimenuitem
>Historial</guimenuitem
> desde el menú <guimenu
>Ver</guimenu
>, &cervisia; ejecutará el siguiente comando: </para>
<para>
<screen
><command
>cvs history -e -a</command
></screen>
</para>
<note
><para
>Con esto obtendrá el archivo de registro completo del servidor, esto es una lista de eventos para todos los usuarios y módulos. Esto puede resultar ser un archivo gigantesco. </para
></note>
<para
>Ahora podrá ver la lista de eventos ordenados por fecha. En la segunda columna se muestra el tipo de evento. </para>
<itemizedlist>
<listitem
><para
>Descarga - El usuario que aparece en la segunda columna descargó un módulo. </para
></listitem>
<listitem
><para
>Etiqueta . Un usuario hizo uso del comando <command
>cvs rtag</command
>. Observe que el uso de <command
>cvs rtag</command
> (tal como hace &cervisia; al seleccionar <menuchoice
><guimenu
>Avanzado</guimenu
><guimenuitem
>Etiqueta/Rama</guimenuitem
></menuchoice
>) no se registra en el historial. Esto es así por motivos históricos (vea la <acronym
>FAQ</acronym
> de &CVS;). </para
></listitem>
<listitem
><para
>Publicación - Un usuario publicó un módulo. Hoy en día este comando es de poca utilidad y se usa muy poco. </para
></listitem>
<listitem
><para
>Actualización, Borrado - Un usuario actualizó un archivo que había sido borrado en el repositorio. El archivo se borró también en su copia local. </para
></listitem>
<listitem
><para
>Actualizad, Copiado - Un usuario ha actualizado un archivo. Se ha copiado una nueva versión en su copia local. </para
></listitem>
<listitem
><para
>Actualizado, Combinado - Un usuario actualizó un archivo y las modificaciones presentes en la copia del repositorio se introdujeron en su copia local. </para
></listitem>
<listitem
><para
>Actualizado -.Conflicto - Se detectaron conflictos entre la versión local del usuario y la del repositorio. </para
></listitem>
<listitem
><para
>Entregado, Modificado - Un usuario envió al repositorio las modificaciones que realizó sobre un archivo. </para
></listitem>
<listitem
><para
>Entregado, Añadido - Un usuario añadió un archivo nuevo al proyecto y lo entregó al repositorio. </para
></listitem>
<listitem
><para
>Entregado, Eliminado - Un usuario eliminó un archivo de su copia local y del repositorio. </para
></listitem>
</itemizedlist>
<figure id="screenshot-history" float="1">
<title
>Captura de pantalla del diálogo de historial de &cervisia;</title>
<mediaobject>
<imageobject
><imagedata format="PNG" fileref="history.png"/></imageobject>
<textobject
><phrase
>Captura de pantalla del diálogo de historial de &cervisia;</phrase
></textobject>
</mediaobject>
</figure>
<para
>Puede modificar el criterio del orden de listado pinchando en los encabezados de las columnas, Dispone de varias casillas de verificación para activar diversas opciones de filtrado para que se muestren sólo las entradas de su interés. </para>
<itemizedlist>
<listitem
><para
>Mostrar entregas - muestra las entregas realizadas</para
></listitem>
<listitem
><para
>Mostrar descargas - muestra las descargas realizadas</para
></listitem>
<listitem
><para
>Mostrar etiquetados - Muestra todo lo relacionado con el etiquetado</para
></listitem>
<listitem
><para
>Mostrar otros eventos - Muestra los eventos no incluidos en los apartados anteriores.</para
></listitem>
<listitem
><para
>Sólo usuario - Muestra los eventos realizados por un determinado usuario.</para
></listitem>
<listitem
><para
>Sólo archivos que cumplan el patrón - filtra los nombres de archivo mediante una expresión regular.</para
></listitem>
<listitem
><para
>Sólo directorios que cumplan el patrón - filtra los nombres de directorios mediante una expresión regular</para
></listitem>
</itemizedlist>
<para
>Los caracteres especiales reconocidos por el sistema de expresiones regulares son: </para>
<itemizedlist>
<listitem
><para
><literal
>x*</literal
> concuerda con todos los nombres que incluyan el carácter <literal
>x</literal
>. </para
></listitem>
<listitem
><para
><literal
>x+</literal
> concuerda con una o más apariciones del carácter <literal
>x</literal
>. </para
></listitem>
<listitem
><para
><literal
>x?</literal
> concuerda con una o ninguna aparición del carácter <literal
>x</literal
> </para
></listitem>
<listitem
><para
><literal
>^</literal
> concuerda con el inicio de la cadena. </para
></listitem>
<listitem
><para
><literal
>$</literal
> concuerda con el final de la cadena. </para
></listitem>
<listitem
><para
><literal
>[a-cx-z]</literal
> concuerda con una serie de caracteres ⪚ en este caso serían a,b,c,x,y,z. </para
></listitem>
</itemizedlist>
</sect1>
</chapter>
<chapter id="advancedusage">
<title
>Usos avanzados</title>
<sect1 id="updatingto">
<title
>Actualizar a una determinada fecha, rama o etiqueta.</title>
<para
>Las ramas de un módulo son versiones paralelas del mismo. Un ejemplo real de su uso es la publicación de un proyecto de software. Después de una publicación importante, habrá que corregir los fallos que vayan surgiendo en el código, pero también será necesario añadir nuevas características al código ya existente. Dado que es muy complicado realizar ambas cosas al mismo tiempo (las nuevas características incorporarán también nuevos fallos), &CVS; permite crear una versión paralela del proyecto que llamaremos "rama de la versión estable" y donde sólo se podrán añadir correcciones a los fallos existentesmientras que en la rama principal (HEAD) se siguen añadiendo nuevas características. </para>
<para
>Las etiquetas se usan para marcar una determinada versión de un proyecto. &CVS; asigna una determinada etiqueta a una versión de cada archivo por tanto cuando descarga o se actualiza a una determinada etiqueta siempre tendrá la misma versión del archivo; las etiquetas, a diferencias de las ramas, no se asignan dinámicamente sino que son inamovibles. Son de utilidad a la hora de marcar publicaciones del proyecto, grandes cambios en el código, &etc;. </para>
<para
>Tanto si está participando en el desarrollo de un proyecto como si sólo hace un seguimiento del mismo, no siempre trabajará con la rama principal. Después de la publicación de una nueva versión, quizás prefiera seguir con esa rama para realizar traducciones, arreglar fallos o simplemente porque se le supone mayor estabilidad. Para ello deberá actualizarse a la rama correspondiente a la publicación aunque todos los cambios que entregue también se enviarán a la nueva rama. </para>
<para
>Si desea realizar el seguimiento de los fallos de alguna versión anterior, sólo tendrá que "desactualizarse" a la versión que desee. Lo mismo sucede si desea volver a la versión existente en una fecha anterior, esto es especialmente útil si se ha introducido algún error entre dos versiones distintas. Cuando pase a una determinada fecha o etiqueta, las versiones de todos sus archivos serán los mismos que los de la versión existente en esa fecha o correspondiente a la etiqueta en cuestión. </para>
<warning
><para
>Antes de actualizarse a una rama o etiqueta diferente, asegúrese de haber enviado todas sus modificaciones a la rama en la que está trabajando. Si se actualiza teniendo cambios pendientes, es posible que los pierda. Si lo prefiere puede realizar una nueva <link linkend="checkingout"
>Descarga</link
> para trabajar con ambas versiones a la vez. </para
></warning>
<figure id="screenshot-updatetag" float="1">
<title
>Captura de pantalla del diálogo de actualización de &cervisia;</title>
<mediaobject>
<imageobject
><imagedata format="PNG" fileref="updatetag.png"/></imageobject>
<textobject
><phrase
>Captura de pantalla del diálogo de actualización de &cervisia;</phrase
></textobject>
</mediaobject>
</figure>
<variablelist>
<varlistentry>
<term
><guilabel
>Actualizar a una rama determinada</guilabel
></term>
<listitem
><para
>Seleccione esta opción para actualizarse a una rama determinada. Introduzca el nombre de la rama en el menú desplegable o pulse el botón <guilabel
>Buscar lista</guilabel
> para obtener una lista de las ramas del &CVS; y seleccione la que desee. </para
></listitem>
</varlistentry>
<varlistentry>
<term
><guilabel
>Actualizar a una etiqueta determinada</guilabel
></term>
<listitem
><para
>Seleccione esta opción si desea actualizarse a una determinada etiqueta. Introduzca el nombre de la etiqueta en el menú desplegable o pulse <guilabel
>Buscar lista</guilabel
> para descargar la lista de etiquetas disponibles en el servidor &CVS; y seleccione la que desee. </para
></listitem>
</varlistentry>
<varlistentry>
<term
><guilabel
>Actualizar a fecha</guilabel
></term>
<listitem
><para
>Seleccione esta opción para actualizarse a la versión existente en una determinada fecha. Aquí podrá emplear una gran variedad de formatos para la fecha, p. ej. <literal
>aaaa-mm-dd</literal
> donde <literal
>aaaa</literal
> es el año, <literal
>mm</literal
> el mes (numérico) y <literal
>dd</literal
> corresponde al día. Puede utilizar frases en inglés como <literal
>yesterday</literal
> o <literal
>2 weeks ago</literal
>. </para
></listitem>
</varlistentry>
</variablelist>
<note
><para
>Actualizar a una determinada etiqueta o hacerla inamovible. &ie; no podrá entregar más modificaciones de este archivo (salvo que la etiqueta sea la de una rama). Para volver a la rama principal seleccione <menuchoice
><guimenu
>Avanzado</guimenu
><guimenuitem
>Actualizar a HEAD</guimenuitem
></menuchoice
>. </para
></note>
<para
>El comando ejecutado al actualizar a una rama o etiqueta es: <screen
><command
>cvs update -r <replaceable
>etiqueta</replaceable
></command
></screen>
</para>
<para
>El comando para actualizarse a una fecha determinada es: <screen
><command
>cvs update -D <replaceable
>fecha</replaceable
></command
></screen>
</para>
<para
>El comando ejecutado para actualizarse a la rama principal (HEAD) es: <screen
><command
>cvs update <option
>-A</option
></command
></screen>
</para>
</sect1>
<sect1 id="taggingbranching">
<title
>Etiquetado y denominación de las ramas</title>
<para
>Aquí discutiremos sólo los aspectos técnicos del etiquetado y denominación de las ramas. Si usted es <emphasis
>usuario</emphasis
> y no administrador de un repositorio, probablemente nunca se le presente este problema.Pero si usted administra un proyecto, debería leer también acerca de los problemas no técnicos (cantidad de tiempo, facilidad con la que se cometen errores...) que conlleva el mantenimiento de varias ramas de un mismo proyecto. Podrá encontrar algunas referencias sobre este tema en el apéndice. </para>
<para
>El etiquetado suele hacerse cada vez que se publica una nueva versión con lo cual es bastante sencillo volver a la situación anterior si algo va mal. En general, el nombre de las etiquetas está formado por el nombre del proyecto y el número de versión. Por ejemplo, puede obtener la versión 1.0 de &cervisia; si busca la etiqueta <literal
>CERVISIA_1_0</literal
>. &cervisia; sigue estrictamente las reglas de &CVS; sobre nombres de rama válidos. Deben empezar por una letras y sólo pueden contener más letras, números, guiones y guiones bajos. </para>
<para
>En general, querrá etiquetar todo el proyecto (aunque por supuesto, &CVS; le permite etiquetar sólo una parte). Para ello marque el directorio principal y seleccione <menuchoice
><guimenu
>Avanzado</guimenu
><guimenuitem
>Etiqueta/Rama</guimenuitem
></menuchoice
>. Introduzca el nombre de la rama y pulse <keycap
>Intro</keycap
>. </para>
<para
>La creación de una rama no es mucho más complicado: marque la casilla <guibutton
>Crear rama con esta etiqueta</guibutton
> en el diálogo de la etiqueta. También puede borrar una etiqueta existente seleccionando <menuchoice
><guimenu
>Avanzado</guimenu
><guimenuitem
>Borrar etiqueta</guimenuitem
></menuchoice
> desde la ventana principal. </para>
<para
>Otro aspecto de la creación de ramas es la combinación de modificaciones de una rama cualquiera en la actual. Si desea hacerlo, seleccione <menuchoice
><guimenu
>Avanzado</guimenu
><guimenuitem
>Combinar</guimenuitem
></menuchoice
>. Aparecerá un diálogo con dos opciones: </para>
<para
>Podrá combinar todas las modificaciones realizadas en una determinada rama en la rama actual. En ese caso, deberá marcar la casilla <guibutton
>Combinar desde la rama</guibutton
> e indicar desde que rama quiere combinar los cambios. &cervisia; ejecutará el siguiente comando: </para>
<para>
<screen
><command
>cvs update <option
>-j</option
> <replaceable
>etiqueta de la rama</replaceable
></command
></screen>
</para>
<para
>La otra posibilidad es combinar sólo los cambios realizados entre dos etiquetas de una misma rama. Esto suele ocurrir cuando se combinan varias veces una misma rama con el tronco principal. Marque la casilla <guibutton
>Combinar modificaciones</guibutton
> e introduzca (en el orden correcto) las dos etiquetas en cuestión. Se ejecutará el comando: </para>
<para>
<screen
><command
>cvs update <option
>-j</option
> <replaceable
>rama1</replaceable
> <option
>-j</option
> <replaceable
>rama2</replaceable
></command
></screen>
</para>
</sect1>
<sect1 id="watches">
<title
>Uso de testigos</title>
<para
>Un testigo sirve para que el servidor &CVS; notifique a los usuarios cuando se cambia un determinado archivo o un miembro ha empezado a editarlo. Para poder usar testigos será necesario que el archivo <filename
><envar
>$CVSROOT</envar
>/CVSROOT/notify</filename
> esté correctamente configurado.Este tema no será tratado aquí, si necesita información sobre cómo configurarlo, lea alguno de los libros citados en el apéndice. </para>
<para
>&cervisia; proporciona seis opciones para gestionar los testigos. </para>
<para
>Para añadir un testigo a uno o varios archivos, utilice <menuchoice
><guimenu
>Avanzado</guimenu
><guimenuitem
>Añadir testigo</guimenuitem
></menuchoice
>, podrá elegir para qué acciones quiere que &CVS; le notifique en el diálogo que se le muestra. P.ej. si sólo quiere recibir una notificación cuando se modifica un determinado archivo marque las casillas <guibutton
>Sólo</guibutton
> y <guibutton
>Entregas</guibutton
>. Si quiere que se le notifique cualquier acción relacionada con un determinado archivo,marque la casilla <guibutton
>Todos</guibutton
>. El comando que se ejecuta es el siguiente: </para>
<para>
<screen
><command
>cvs watch add -a commit <replaceable
>nombre archivos</replaceable
></command
></screen>
</para>
<para
>Puede variar dependiendo de las acciones a notificar que haya escogido. </para>
<para
>Si ya no desea seguir de cerca los cambios de un determinado archivo, puede eliminar los testigos seleccionando <menuchoice
><guimenu
>Avanzado</guimenu
><guimenuitem
>Eliminar testigo</guimenuitem
></menuchoice
>, verá un diálogo con las mismas opciones que se le ofrecieron al crearlo. Una vez que dé su confirmación, &cervisia;ejecutará el siguiente comando: </para>
<para>
<screen
><command
>cvs watch remove <replaceable
>nombre archivos</replaceable
></command
></screen>
</para>
<para
>quizás con la opción <option
>-a</option
> para el evento elegido. </para>
<para
>Finalmente, si quiere ver una lista con las personas que tienen testigos en un determinado archivo, seleccione <menuchoice
><guimenu
>Avanzado</guimenu
><guimenuitem
>Mostrar testigos</guimenuitem
></menuchoice
>. Se ejecutará el siguiente comando: </para>
<para>
<screen
><command
>cvs watchers <replaceable
>nombre archivos</replaceable
></command
></screen>
</para>
<para
>Durante el uso normal de &CVS;, cada miembro trabaja separadamente sobre su copia local del repositorio, puede modificar archivos simplemente abriéndolos en en editor sin que nadie lo sepa hasta que entregue los cambios. </para>
<para
>Para algunos grupos de desarrolladores ésta no es la forma ideal de trabajar, prefieren saber si alguien está trabajando sobre un determinado archivo <emphasis
>tan pronto</emphasis
> como empiece a hacerlo. Esto puede hacerse si antes de empezar a editar un archivo selecciona <menuchoice
><guimenu
>Avanzados</guimenu
><guimenuitem
>Editar</guimenuitem
></menuchoice
> desde la ventana principal de &cervisia;. El comando que se ejecutará es el siguiente: </para>
<para>
<screen
><command
>cvs edit <replaceable
>nombre archivos</replaceable
></command
></screen>
</para>
<para
>Esto enviará una notificación a todos los que hayan puesto un testigo <literal
>edit</literal
> en ese archivo, también hará que se le considere a usted como un <emphasis
>editor</emphasis
> de ese archivo. Puede ver una lista de todos los editores de un determinado archivo seleccionando <menuchoice
><guimenu
>Avanzado</guimenu
><guimenuitem
>Mostrar editores</guimenuitem
></menuchoice
>. El comando que se ejecutará es el siguiente: </para>
<para>
<screen
><command
>cvs editors <replaceable
>nombre archivos</replaceable
></command
></screen>
</para>
<para
>La sesión de trabajo sobre un archivo termina automáticamente cuando se entregan los cambios. En ese momento se envía una notificación <literal
>unedit</literal
> a todos los miembros que hayan registrado el correspondiente testigo para ese archivo. Algunas veces es posible que no desee entregar el archivo sino que prefiera parar el trabajo y retornar a la revisión anterior, para ello seleccione <menuchoice
><guimenu
>Avanzado</guimenu
><guimenuitem
>Deshacer edición de archivos</guimenuitem
></menuchoice
>. Observe que &cervisia; no le pedirá confirmación con lo cual nada más seleccionarlo perderá todo el trabajo realizado desde la selección de <menuchoice
><guimenu
>Avanzado</guimenu
><guimenuitem
>Editar</guimenuitem
></menuchoice
>. El comando ejecutado por &cervisia; es el siguiente: </para>
<para>
<screen
><command
>echo y | cvs unedit <replaceable
>nombre archivos</replaceable
></command
></screen>
</para>
<para
>Hasta ahora hemos tratado el caso en que los desarrolladores hacen y deshacen cambios voluntariamente, pero &CVS; también es capaz de <emphasis
>obligar</emphasis
> a hacer uso de estos mecanismo. El comando que hace esto es <command
>cvs watch on</command
>, no entraremos en detalles porque su uso recae sobre todo en los administradores del repositorio pero lo que debe saber los desarrolladores es que cuando se controla la edición, la copia de trabajo se descarga como <emphasis
>sólo lectura</emphasis
>, es decir que, por omisión, no podrá editar una archivo (salvo que emplee diversas artimañas como cambiar los permisos con <command
>chmod</command
>). Sólo si selecciona <menuchoice
><guimenu
>Avanzado</guimenu
><guimenuitem
>Editar</guimenuitem
></menuchoice
> será posible editar el archivo, pero volverá a ser de sólo lectura otra vez cuando los entregue al servidor o seleccione <menuchoice
><guimenu
>Avanzado</guimenu
><guimenuitem
>Deshacer edición de archivos</guimenuitem
></menuchoice
>. </para>
<para
>La interfaz de edición de &cervisia; también puede ayudarle de otra forma en su trabajo con proyectos que obliguen a usar testigos. Si acaba de abrir un editor con un archivo de sólo lectura haciendo doble click sobre él o seleccionando <menuchoice
><guimenu
>Archivo</guimenu
><guimenuitem
>Editar</guimenuitem
></menuchoice
> no debería ser capaz de guardar los cambios posteriores. Obviamente, existe una razón para esto: cada vez que desea modificar un archivo, será necesario ejecutar <command
>cvs edit</command
> antes así que todos los miembros que tengan un testigo sobre ese archivo recibirán una notificación informándoles que usted trabaja sobre él. </para>
<para
>En este caso, es recomendable marcar la opción <menuchoice
><guimenu
>Preferencias</guimenu
><guimenuitem
>Hacer cvs edit automáticamente cuando sea necesario</guimenuitem
></menuchoice
> así cada vez que edite el archivo haciendo doble click sobre él, &cervisia; ejecutará el comando <command
>cvs edit</command
> antes de abrir el editor para que pueda editar normalmente el archivo. Cuando termine su trabajo, entréguelo al repositorio. Los archivos entregados vuelven a ser de sólo lectura. </para>
</sect1>
<sect1 id="locking">
<title
>Bloqueo</title>
<para
>El modelo de desarrollo más frecuente en &CVS; es el llamado <emphasis
>Descarga libre</emphasis
> donde cada desarrollador tiene su propia copia local y puede realizar y entregar todos los cambios que desee. Con el uso de sistemas de notificación - como <command
>cvs edit</command
> - varios desarrolladores pueden trabajar al mismo tiempo en un mismo archivo mientras que los cambios respectivos se combinarán en sus copias locales cuando hagan una actualización. </para>
<para
>Otros sistemas de control de versiones como <acronym
>RCS</acronym
> y <application
>SourceSafe</application
> emplean un modelo distinto. Cuando un miembro quiere editar un archivo, tiene que <emphasis
>bloquearlo</emphasis
> y sólo una persona puede bloquear un archivo al mismo tiempo. Una vez terminado su trabajo, se desactiva el bloqueo. Por una parte este método evita por completo los conflictos pero no es posible que dos personas estén trabajando al mismo tiempo en un mismo archivo aunque lo hagan en partes distintas lo que puede ralentizar el desarrollo. No se tratarán aquí las ventajas en inconvenientes de ambos modelos y aunque &CVS; incorpora algunos métodos de bloqueo no suele ser la forma preferida de trabajo. No debería utilizar esto a no se que el responsable del proyecto lo autorice. </para>
<para
>Para bloquear archivos en &cervisia; haga lo siguiente: seleccione los archivos deseados en la vista principal luego seleccione <menuchoice
><guimenu
>Avanzado</guimenu
><guimenuitem
>Bloquear archivos</guimenuitem
></menuchoice
>. Esto ejecutará el comando </para>
<para>
<screen
><command
>cvs admin -l <replaceable
>nombre archivos</replaceable
></command
></screen>
</para>
<para
>El efecto contrario se logra seleccionando <menuchoice
><guimenu
>Avanzado</guimenu
><guimenuitem
>Desbloquear archivos</guimenuitem
></menuchoice
> lo que ejecuta el comando</para>
<para>
<screen
><command
>cvs admin -u <replaceable
>nombre archivos</replaceable
></command
></screen>
</para>
</sect1>
</chapter>
<chapter id="customization">
<title
>Personalizar &cervisia;</title>
<para
>Es posible personalizar &cervisia; de varias formas para satisfacer sus necesidades.Algunas de las opciones que más habitualmente se modifican están disponibles directamente en el menú <guimenu
>Preferencias</guimenu
>. Otras están agrupadas en un diálogo en <menuchoice
><guimenu
>Opción</guimenu
><guimenuitem
>Preferencias</guimenuitem
></menuchoice
>. </para>
<sect1 id="customize-general">
<title
>General</title>
<variablelist>
<varlistentry id="customize-username">
<term
><guilabel
>Nombre de usuario para el editor de cambios de registro</guilabel
></term>
<listitem
><para
>Cada vez que selecciona <menuchoice
><guimenu
>Archivo</guimenu
><guimenuitem
>Insertar entrada de registro de cambios</guimenuitem
></menuchoice
> se genera una entrada en el registro con la fecha actual y su nombre de usuario. En general, se considera lo más correcto introducir su nombre completo y su email en cada una de sus entradas. &cervisia; hace eso exactamente. </para
></listitem>
</varlistentry>
<varlistentry id="customize-cvspath">
<term
><guilabel
>Ruta al ejecutable cvs o cvs</guilabel
></term>
<listitem
><para
>Aquí puede introducir la ruta hacia el comando <command
>cvs</command
>. por omisión, &cervisia; utilizará el ejecutable en <envar
>$PATH</envar
>&CVS;. </para
></listitem>
</varlistentry>
</variablelist>
</sect1>
<sect1 id="customize-diff">
<title
>Diff</title>
<variablelist>
<varlistentry id="customize-context">
<term
><guilabel
>Número de líneas de contexto en el diálogo de diff</guilabel
></term>
<listitem
><para
>&cervisia; utiliza la opción <option
>-U</option
> para el comando <command
>diff</command
>, esto hace que sólo se muestren un número limitado de líneas para cada diferencia (líneas contextuales). Aquí podrá seleccionar el argumento para <command
>-U</command
>. </para
></listitem>
</varlistentry>
<varlistentry id="customize-diffopt">
<term
><guilabel
>Opciones adicionales para cvs diff</guilabel
></term>
<listitem
><para
>Escriba aquí los argumentos adicionales para <command
>diff</command
>. Un caso habitual es poner <option
>-b</option
> para que <command
>diff</command
> ignore los cambios en los espacios en blanco. </para
></listitem>
</varlistentry>
<varlistentry id="customize-tabwidth">
<term
><guilabel
>Espacios de cada tabulador en el diálogo de diferencias:</guilabel
></term>
<listitem
><para
>En el diálogo de diferencias, el tabulador representa </para
></listitem>
</varlistentry>
<varlistentry id="customize-difffrontend">
<term
><guilabel
>Interfaz externo de diff</guilabel
></term>
<listitem
><para
>Cuando utiliza alguna de las funciones que muestra el dialogo de diferencias como <menuchoice
><guimenu
>Ver</guimenu
><guimenuitem
>Diferencias con el repositorio</guimenuitem
></menuchoice
>. &cervisia; invoca su propio interfaz para diff. Si prefiere usar otro como <application
>Kompare</application
>, <application
>TkDiff</application
>, o <application
>xxdiff</application
>, introduzca aquí su nombre y su ruta. </para
></listitem>
</varlistentry>
</variablelist>
</sect1>
<sect1 id="customize-status">
<title
>Estado</title>
<variablelist>
<varlistentry id="customize-startstatus-remote">
<term
><guilabel
>Inicia un archivo >estado automáticamente cada vez que abre un archivo para trabajar en un repositorio remoto.</guilabel
></term>
<listitem
><para
>Cuando marca esta opción, se inicia el comando <menuchoice
><guimenu
>Archivo</guimenu
><guimenuitem
>Estado</guimenuitem
></menuchoice
> cada vez que abre trabaja sobre un archivo remoto. La ejecución de este comando puede llevar algún tiempo y será necesaria una conexión al servidor. </para
></listitem>
</varlistentry>
<varlistentry id="customize-startstatus-local">
<term
><guilabel
>Cuando se abre una copia de trabajo desde un repositorio local, se inicia automáticamente la selección Archivo>Estado.</guilabel
></term>
<listitem
><para
>Cuando marca esta opción , la selección <menuchoice
><guimenu
>Archivo</guimenu
><guimenuitem
>Estado</guimenuitem
></menuchoice
> se inicia cada vez que abre una copia de trabajo local. </para
></listitem>
</varlistentry>
</variablelist>
</sect1>
<sect1 id="customize-advanced">
<title
>Avanzado</title>
<variablelist>
<varlistentry id="customize-timeout">
<term
><guilabel
>Tiempo máximo hasta que aparece un diálogo de progreso (en milisegundos):</guilabel
></term>
<listitem
><para
>La práctica totalidad de los comandos de &CVS; ejecutados en el directorio de trabajo del servidor requieren estar conectado. La respuesta varía según las fluctuaciones del ancho de banda y la carga del servidor. Por este motivo, cuando se ejecutan comandos como <menuchoice
><guimenu
>Ver</guimenu
><guimenuitem
>Diferencias con el repositorio</guimenuitem
></menuchoice
>, &cervisia; abre un diálogo que le indica que el comando está en ejecución y que le permite cancelarlo. Este diálogo también puede mostrar mensajes de error del &CVS;. Dado que ese diálogo puede ser molesto, sólo se muestra tras una cierta cantidad de tiempo, que por omisión, son 4 segundos. desde aquí puede cambiar ese valor. </para
></listitem>
</varlistentry>
<varlistentry id="customize-compression">
<term
><guilabel
>Grado de compresión por omisión</guilabel
></term>
<listitem
><para
>El cliente <command
>cvs</command
> comprime los parches y archivos al enviarlos por la red. Es posible establecer el nivel de compresión mediante la opción <option
>-z</option
>. Podrá configurar &cervisia; para utilizar por omisión el nivel de compresión que defina aquí, aunque también es posible definirlo para cada repositorio en <menuchoice
><guimenu
>Repositorio</guimenu
><guimenuitem
>Repositorios</guimenuitem
></menuchoice
>. </para
></listitem>
</varlistentry>
<varlistentry id="customize-sshagent">
<term
><guilabel
>Inicie ssh-agent o utilice uno que ya se esté ejecutando</guilabel
></term>
<listitem
><para
>Marque esa casilla si utiliza repositorios <link linkend="rsh"
>ext (rsh)</link
>, &ssh; para comunicarse con el repositorio y <application
>ssh-agent</application
> para gestionar sus claves. </para
></listitem>
</varlistentry>
</variablelist>
</sect1>
<sect1 id="customize-look">
<title
>Aspecto</title>
<variablelist>
<varlistentry id="customize-protocolfont">
<term
><guilabel
>Tipo de letra para la ventana de protocolo</guilabel
></term>
<listitem
><para
>Pulse este botón para abrir el diálogo <guilabel
>Seleccionar tipo de letra</guilabel
> y elija la que desee. La ventana de protocolo es donde se muestra la salida del cliente <command
>cvs</command
>. </para
></listitem>
</varlistentry>
<varlistentry id="customize-annotatefont">
<term
><guilabel
>Tipo de letra para la vista anotada</guilabel
></term>
<listitem
><para
>Pulse este botón para abrir el diálogo <guilabel
>Tipo de letra</guilabel
> y configurar el tipo de letra de la <link linkend="annotate"
>Vista anotada</link
>. </para
></listitem>
</varlistentry>
<varlistentry id="customize-difffont">
<term
><guilabel
>Tipo de letra para la vista de diferencias</guilabel
></term>
<listitem
><para
>Pulse este botón para abrir el diálogo <guilabel
>Configurar tipo de letra</guilabel
> para configurar el que se emplea en los <link linkend="diff"
>diálogos de diferencias</link
>. </para
></listitem>
</varlistentry>
<varlistentry id="customize-colors">
<term
><guilabel
>Colores</guilabel
></term>
<listitem
><para
>Si pulsa uno de los botones coloreados, se abrirá el diálogo <guilabel
>Seleccionar color</guilabel
>, así podrá seleccionar el color a usar en los diálogos <guilabel
>Conflicto</guilabel
>, <guilabel
>Cambio local</guilabel
> o <guilabel
>Cambio remoto</guilabel
> de la ventana principal o <guilabel
>Cambios diff</guilabel
>, <guilabel
>Inserción diff</guilabel
> o <guilabel
>Borrado diff</guilabel
> del interfaz de diff incluido en &cervisia;. </para
></listitem>
</varlistentry>
<varlistentry id="customize-splitter">
<term
><guilabel
>Dividir horizontalmente la ventana principal</guilabel
></term>
<listitem
><para
>La ventana principal de &cervisia; suele dividirse verticalmente en una ventana superior donde se sitúa el árbol de archivos y otra inferior con la salida de &CVS;. Si lo desea puede hacer que esta división sea horizontal. </para
></listitem>
</varlistentry>
</variablelist>
</sect1>
</chapter>
<chapter id="appendix">
<title
>Apéndice</title>
<sect1 id="ignoredfiles">
<title
>Archivos ignorados</title>
<para
>En el árbol de archivos principal, &cervisia; no mostrará todos los archivos que realmente están ahí. Esto es igual que para el comando <command
>cvs</command
>. &cervisia; intenta emular lo mejor posible su comportamiento obteniendo información de los archivos a ignorar en los siguientes lugares: </para>
<itemizedlist>
<listitem
><para
>Una lista estática que incluye cosas como <literal role="extension"
>*.o</literal
> y <filename
>core</filename
>. Vea la documentación de &CVS; para más detalles. </para
></listitem>
<listitem
><para
>El archivo <filename
><envar
>$HOME</envar
>/.cvsignore</filename
>. </para
></listitem>
<listitem
><para
>La variable de entorno <envar
>$CVSIGNORE</envar
>. </para
></listitem>
<listitem
><para
>El archivo <filename
>.cvsignore</filename
> del directorio correspondiente. </para
></listitem>
</itemizedlist>
<para
>El propio comando <command
>cvs</command
> también busca entradas en el archivo <filename
><envar
>$CVSROOT</envar
>/CVSROOT/cvsignore</filename
> a pesar de que se encuentra en el servidor y se supone que &cervisia;debe ser capaz de hacer su trabajo sin conexión. Si usted trabaja con un grupo que prefiere utilizar una lista de archivos a ignorar en el servidor, es una buena idea que eche un vistazo a los patrones que aparecen en ese archivo y los incluya en el archivo <filename
>.cvsignore</filename
> de su propio directorio home. </para>
</sect1>
<sect1 id="information">
<title
>Más información y soporte</title>
<itemizedlist>
<listitem
><para
>&CVS; incluye una documentación muy completa en forma de páginas info llamada "The Cederqvist". Si está instalada en sus sistema, puede consultarla escribiendo <userinput
>info:/cvs</userinput
> en el cuadro de direcciones del <application
>centro de ayuda de KDE</application
>. También puede seleccionar <menuchoice
><guimenu
>Ayuda</guimenu
><guimenuitem
>CVS Info</guimenuitem
></menuchoice
>desde &cervisia;. La versión on-line en HTML de Derivaste puede consultarse <ulink url="http://cvshome.org/docs/manual/cvs.html"
>en su web</ulink
>. </para>
<para
>Dado que ese libro se mantiene conjuntamente con &CVS;, suele ser la fuente más actualizada. No obstante, considere también consultar otras fuentes para aprender el manejo de &CVS;, en especial las siguiente: </para
></listitem>
<listitem
><para
>Karl Fogel ha escrito <ulink url="http://cvsbook.red-bean.com/index.html"
>Open Source Development with CVS</ulink
>. Aproximadamente la mitad del libro trata del proceso de desarrollo de código libre mientras la otra mitad es documentación técnica sobre &CVS;. Afortunadamente, esta segunda parte ha sido publicada bajo la GPL y es posible descargarla en HTML. En la página antes mencionada, también se encuentra una lista de los errores encontrados en el libro. </para
></listitem>
<listitem
><para
>Los aspecto de &CVS; se discuten en su propia <ulink url="http://mail.gnu.org/mailman/listinfo/info-cvs"
>lista de correo</ulink
>. </para
></listitem>
<listitem
><para
>En el grupo de USENET <literal
>comp.software.config.mgmt</literal
> se discuten asuntos sobre sistemas de gestión en general. Aunque &CVS; representa sólo una pequeña parte de las discusiones, puede resultarle interesante discutir acerca de las ventajas de &CVS; respeto de otros sistemas. </para
></listitem>
<listitem
><para
>Por último (no menos importante):una lista de bajo tráfico <ulink url="http://lists.sourceforge.net/mailman/listinfo/cervisia-user"
>lista de correo de &cervisia;</ulink
> </para
></listitem>
</itemizedlist>
</sect1>
<sect1 id="commandreference">
<title
>Referencia de comandos</title>
<!-- File Menu -->
<sect2 id="menufile">
<title
>El menú Archivo</title>
<variablelist>
<varlistentry>
<term
><menuchoice
><guimenu
>Archivo</guimenu
><guimenuitem
>Abrir directorio de trabajo</guimenuitem
> </menuchoice
></term>
<listitem
><para
>Abre un directorio de trabajo en la ventana principal. Vea <xref linkend="mainscreen"/>. </para
></listitem>
</varlistentry>
<varlistentry>
<term
><menuchoice
><guimenu
>Archivo</guimenu
><guimenuitem
>Directorios locales recientes</guimenuitem
> </menuchoice
></term>
<listitem
><para
>Abre uno de los directorios de trabajo usados recientemente. </para
></listitem>
</varlistentry>
<varlistentry>
<term
><menuchoice
><guimenu
>Archivo</guimenu
><guimenuitem
>Insertar entrada de registro de cambios</guimenuitem
> </menuchoice
></term>
<listitem
><para
>Abre el editor de registros de modificaciones listo para añadir una nueva entrada con la fecha actual. Vea <xref linkend="committingfiles"/>. </para
></listitem>
</varlistentry>
<varlistentry>
<term
><menuchoice
><shortcut
><keycombo
><keycap
>&Ctrl;</keycap
><keycap
>U</keycap
></keycombo
></shortcut
> <guimenu
>Archivo</guimenu
><guimenuitem
>Actualizar</guimenuitem
> </menuchoice
></term>
<listitem
><para
>Ejecuta cvs update sobre los archivos seleccionados y modifica adecuadamente la versión de la revisión y el estado. Vea <xref linkend="mainscreen"/>. </para
></listitem>
</varlistentry>
<varlistentry>
<term
><menuchoice
><shortcut
><keycap
>F5</keycap
></shortcut
> <guimenu
>Archivo</guimenu
><guimenuitem
>Estado</guimenuitem
> </menuchoice
></term>
<listitem
><para
>Ejecuta cvs -n update sobre los archivos seleccionados y modifica en consecuencia el estado y la versión de la revisión. Vea <xref linkend="mainscreen"/>. </para
></listitem>
</varlistentry>
<varlistentry>
<term
><menuchoice
><guimenu
>Archivo</guimenu
><guimenuitem
>Editar</guimenuitem
> </menuchoice
></term>
<listitem
><para
>Abre el archivo seleccionado en el editor configurado por omisión en KDE para el tipo de archivo seleccionado. </para
></listitem>
</varlistentry>
<varlistentry>
<term
><menuchoice
><guimenu
>Archivo</guimenu
><guimenuitem
>Resolver</guimenuitem
> </menuchoice
></term>
<listitem
><para
>Abre un diálogo para permitir solucionar conflictos en el archivo seleccionado. Vea <xref linkend="resolvingconflicts"/>. </para
></listitem>
</varlistentry>
<varlistentry>
<term
><menuchoice
><shortcut
><keycap
>#</keycap
></shortcut
> <guimenu
>Archivo</guimenu
><guimenuitem
>Enviar</guimenuitem
> </menuchoice
></term>
<listitem
><para
>Le permite entregar al repositorio los archivos seleccionados. Vea <xref linkend="committingfiles"/>. </para
></listitem>
</varlistentry>
<varlistentry>
<term
><menuchoice
><shortcut
><keycap
>+</keycap
></shortcut
> <guimenu
>Archivo</guimenu
><guimenuitem
>Añadir al repositorio</guimenuitem
> </menuchoice
></term>
<listitem
><para
>Le permite añadir al repositorio los archivos seleccionados. Vea <xref linkend="addingfiles"/>. </para
></listitem>
</varlistentry>
<varlistentry>
<term
><menuchoice
><guimenu
>Archivo</guimenu
><guimenuitem
>Añadir binario</guimenuitem
> </menuchoice
></term>
<listitem
><para
>Le permite entregar los archivos seleccionados como binarios (<command
>cvs add<option
>-kb</option
></command
>). Vea <xref linkend="addingfiles"/>). </para
></listitem>
</varlistentry>
<varlistentry>
<term
><menuchoice
><shortcut
><keycap
>-</keycap
></shortcut
> <guimenu
>Archivo</guimenu
><guimenuitem
>Eliminar del repositorio</guimenuitem
> </menuchoice
></term>
<listitem
><para
>Le permite eliminar del repositorio los archivos seleccionados. Vea <xref linkend="removingfiles"/>. </para
></listitem>
</varlistentry>
<!--TODO: add the revert action to the working with files chapter -->
<varlistentry>
<term
><menuchoice
><guimenu
>Archivo</guimenu
><guimenuitem
>Revertir</guimenuitem
> </menuchoice
></term>
<listitem
><para
>Descarta cualquier cambio que usted haya realizado sobre los archivos seleccionados volviendo a la versión del repositorio (opción <option
>-C</option
> del comando <command
>cvs update</command
>). </para
></listitem>
</varlistentry>
<varlistentry>
<term
><menuchoice
><shortcut
><keycombo
><keycap
>&Ctrl;</keycap
><keycap
>Q</keycap
></keycombo
></shortcut
><guimenu
>Archivo</guimenu
><guimenuitem
>Salir</guimenuitem
> </menuchoice
></term>
<listitem
><para
>Termina la ejecución de &cervisia; </para
></listitem>
</varlistentry>
</variablelist>
</sect2>
<!-- View Menu -->
<sect2 id="menuview">
<title
>El menú Ver</title>
<variablelist>
<varlistentry>
<term
><menuchoice
><shortcut
><keycap
>Escape</keycap
></shortcut
> <guimenu
>Ver</guimenu
><guimenuitem
>Detener</guimenuitem
> </menuchoice
></term>
<listitem
><para
>Interrumpe todos los subprocesos en ejecución. </para
></listitem>
</varlistentry>
<varlistentry>
<term
><menuchoice
><shortcut
><keycombo
><keycap
>&Ctrl;</keycap
><keycap
>L</keycap
></keycombo
></shortcut
> <guimenu
>Ver</guimenu
><guimenuitem
>Examinar registro</guimenuitem
> </menuchoice
></term>
<listitem
><para
>Muestra los registros de las versiones del archivo seleccionado. Vea <xref linkend="browsinglogs"/>. </para
></listitem>
</varlistentry>
<varlistentry>
<term
><menuchoice
><shortcut
><keycombo
><keycap
>&Ctrl;</keycap
><keycap
>A</keycap
></keycombo
></shortcut
> <guimenu
>Ver</guimenu
><guimenuitem
>Anotar</guimenuitem
> </menuchoice
></term>
<listitem
><para
>Muestra el archivo seleccionado con anotaciones, esto es que para cada línea del archivo usted puede ver qué autor fue el último en modificarla. Vea <xref linkend="annotate"/>. </para
></listitem>
</varlistentry>
<varlistentry>
<term
><menuchoice
><shortcut
><keycombo
><keycap
>&Ctrl;</keycap
><keycap
>D</keycap
></keycombo
></shortcut
> <guimenu
>Ver</guimenu
><guimenuitem
>Diferencias con el repositorio (BASE)</guimenuitem
> </menuchoice
></term>
<listitem
><para
>Muestra las diferencias entre el archivo seleccionado en el directorio de trabajo y la última revisión que usted actualizó (BASE). Vea <xref linkend="diff"/>. </para
></listitem>
</varlistentry>
<varlistentry>
<term
><menuchoice
><shortcut
><keycombo
><keycap
>&Ctrl;</keycap
><keycap
>H</keycap
></keycombo
></shortcut
><guimenu
>Ver</guimenu
><guimenuitem
>Diferencias con el repositorio (HEAD)</guimenuitem
> </menuchoice
></term>
<listitem
><para
>Muestra las diferencias entre los archivos seleccionados en el directorio de trabajo y la última revisión que usted actualizó (HEAD). Vea <xref linkend="diff"/>. </para
></listitem>
</varlistentry>
<varlistentry>
<term
><menuchoice
><guimenu
>Ver</guimenu
><guimenuitem
>Último cambio</guimenuitem
> </menuchoice
></term>
<listitem
><para
>Muestra las diferencias entre la última revisión del archivo que usted actualizó (BASE) y la anterior. Vea <xref linkend="diff"/>. </para
></listitem>
</varlistentry>
<varlistentry>
<term
><menuchoice
><guimenu
>Ver</guimenu
><guimenuitem
>Historial</guimenuitem
> </menuchoice
></term>
<listitem
><para
>Muestra el historial de &CVS; tal como se recibe del servidor. Vea <xref linkend="browsinghistory"/>. </para
></listitem>
</varlistentry>
<!--TODO: add hide menus to mainscreen section-->
<varlistentry>
<term
><menuchoice
><guimenu
>Ver</guimenu
><guimenuitem
>Ocultar todos los archivos</guimenuitem
> </menuchoice
></term>
<listitem
><para
>Determina si sólo deben mostrarse los directorios en la vista de árbol. Vea <xref linkend="mainscreen"/>. </para
></listitem>
</varlistentry>
<varlistentry>
<term
><menuchoice
><guimenu
>Ver</guimenu
><guimenuitem
>Ocultar archivos no modificados</guimenuitem
> </menuchoice
></term>
<listitem
><para
>Determina si deben o no estar visibles en el árbol principal los archivos desconocidos y actualizados. Vea <xref linkend="mainscreen"/>. </para
></listitem>
</varlistentry>
<varlistentry>
<term
><menuchoice
><guimenu
>Ver</guimenu
><guimenuitem
>Ocultar archivos eliminados</guimenuitem
> </menuchoice
></term>
<listitem
><para
>Determina si deben o no mostrarse en el árbol principal los archivos eliminados. Vea <xref linkend="mainscreen"/>. </para
></listitem>
</varlistentry>
<varlistentry>
<term
><menuchoice
><guimenu
>Ver</guimenu
><guimenuitem
>Ocultar archivos que no son del CVS</guimenuitem
> </menuchoice
></term>
<listitem
><para
>Determina si deben o no ocultarse los archivos que no pertenecen al CVS. Vea <xref linkend="mainscreen"/>. </para
></listitem>
</varlistentry>
<varlistentry>
<term
><menuchoice
><guimenu
>Ver</guimenu
><guimenuitem
>Esconder carpetas vacías</guimenuitem
> </menuchoice
></term>
<listitem
><para
>Determina cuándo se ocultarán las carpetas vacías en la vista del árbol principal. Consulte <xref linkend="mainscreen"/>. </para
></listitem>
</varlistentry>
<varlistentry>
<term
><menuchoice
><guimenu
>Ver</guimenu
><guimenuitem
>Desplegar árbol de archivos</guimenuitem
> </menuchoice
></term>
<listitem
><para
>Abre todas las ramas en el árbol de archivos para que pueda ver todos los archivos y carpetas que contiene. Vea <xref linkend="mainscreen"/>. </para
></listitem>
</varlistentry>
<varlistentry>
<term
><menuchoice
><guimenu
>Ver</guimenu
><guimenuitem
>Plegar árbol de archivos</guimenuitem
> </menuchoice
></term>
<listitem
><para
>Cierra todas las ramas del árbol de archivos. Vea <xref linkend="mainscreen"/> </para
></listitem>
</varlistentry>
</variablelist>
</sect2>
<!-- Advanced Menu -->
<sect2 id="menuadvanced">
<title
>El menú Avanzado</title>
<variablelist>
<varlistentry>
<term
><menuchoice
><guimenu
>Avanzado</guimenu
><guimenuitem
>Etiqueta/Rama</guimenuitem
> </menuchoice
></term>
<listitem
><para
>Etiqueta o asigna a una determinada rama los archivos seleccionados. Vea <xref linkend="taggingbranching"/>. </para
></listitem>
</varlistentry>
<varlistentry>
<term
><menuchoice
><guimenu
>Avanzado</guimenu
><guimenuitem
>Suprimir etiqueta</guimenuitem
> </menuchoice
></term>
<listitem
><para
>Elimina una determinada etiqueta de los archivos seleccionados. Vea <xref linkend="taggingbranching"/> </para
></listitem>
</varlistentry>
<varlistentry>
<term
><menuchoice
><guimenu
>Avanzado</guimenu
><guimenuitem
>Actualizar para la etiqueta/fecha</guimenuitem
> </menuchoice
></term>
<listitem
><para
>Asigna a los archivos seleccionados una determinada fecha o etiqueta inalterable. Vea <xref linkend="updatingto"/> </para
></listitem>
</varlistentry>
<varlistentry>
<term
><menuchoice
><guimenu
>Avanzado</guimenu
><guimenuitem
>Actualizar a HEAD</guimenuitem
> </menuchoice
></term>
<listitem
><para
>Actualiza los archivos seleccionados a la su respectiva versión en la rama HEAD. Vea <xref linkend="updatingto"/>. </para
></listitem>
</varlistentry>
<varlistentry>
<term
><menuchoice
><guimenu
>Avanzado</guimenu
><guimenuitem
>Combinar</guimenuitem
> </menuchoice
></term>
<listitem
><para
>Combina una rama determinada o bien las modificaciones entre dos versiones de los archivos seleccionados. </para
></listitem>
</varlistentry>
<varlistentry>
<term
><menuchoice
><guimenu
>Avanzado</guimenu
><guimenuitem
>Añadir testigo</guimenuitem
> </menuchoice
></term>
<listitem
><para
>Añade un testigo sobre una serie de eventos en los archivos seleccionados. Vea <xref linkend="watches"/>. </para
></listitem>
</varlistentry>
<varlistentry>
<term
><menuchoice
><guimenu
>Avanzado</guimenu
><guimenuitem
>Eliminar testigo...</guimenuitem
> </menuchoice
></term>
<listitem
><para
>Elimina un testigo de los archivos seleccionados. Consulte <xref linkend="watches"/>. </para
></listitem>
</varlistentry>
<varlistentry>
<term
><menuchoice
><guimenu
>Avanzado</guimenu
><guimenuitem
>Mostrar testigos</guimenuitem
> </menuchoice
></term>
<listitem
><para
>Muestra una lista de los testigos presentes en los archivos seleccionados. Vea <xref linkend="watches"/>. </para
></listitem>
</varlistentry>
<varlistentry>
<term
><menuchoice
><guimenu
>Avanzado</guimenu
><guimenuitem
>Editar</guimenuitem
> </menuchoice
></term>
<listitem
><para
>Ejecuta <command
>cvs edit</command
> sobre los archivos seleccionados. Vea <xref linkend="watches"/>. </para
></listitem>
</varlistentry>
<varlistentry>
<term
><menuchoice
><guimenu
>Avanzado</guimenu
><guimenuitem
>Deshacer edición de archivos</guimenuitem
> </menuchoice
></term>
<listitem
><para
>Ejecuta el comando <command
>cvs unedit</command
> sobre los archivos seleccionados. Vea <xref linkend="watches"/>. </para
></listitem>
</varlistentry>
<varlistentry>
<term
><menuchoice
><guimenu
>Avanzado</guimenu
><guimenuitem
>Mostrar editores</guimenuitem
> </menuchoice
></term>
<listitem
><para
>Ejecuta el comando <command
>cvs editors</command
> sobre los archivos seleccionados. Vea <xref linkend="watches"/>. </para
></listitem>
</varlistentry>
<varlistentry>
<term
><menuchoice
><guimenu
>Avanzado</guimenu
><guimenuitem
>Bloquear archivos</guimenuitem
> </menuchoice
></term>
<listitem
><para
>Bloquea los archivos seleccionados. Vea <xref linkend="locking"/>. </para
></listitem>
</varlistentry>
<varlistentry>
<term
><menuchoice
><guimenu
>Avanzado</guimenu
><guimenuitem
>Desbloquear archivos</guimenuitem
> </menuchoice
></term>
<listitem
><para
>Desbloquea los archivos seleccionados. Vea <xref linkend="locking"/>. </para
></listitem>
</varlistentry>
<varlistentry>
<term
><menuchoice
><guimenu
>Avanzado</guimenu
><guimenuitem
>Crear un parche para el repositorio</guimenuitem
> </menuchoice
></term>
<listitem
><para
>Crea un parche en base a las modificaciones hechas por usted en su copia local. Vea <xref linkend="creatingpatches"/>. </para
></listitem>
</varlistentry>
</variablelist>
</sect2>
<!-- Repository Menu -->
<sect2 id="menurepository">
<title
>El menú repositorio</title>
<variablelist>
<varlistentry>
<term
><menuchoice
><guimenu
>Repositorio</guimenu
><guimenuitem
>Crear</guimenuitem
> </menuchoice
></term>
<listitem
><para
>Abre un diálogo para facilitarle la creación de un nuevo repositorio local. Vea <xref linkend="accessing-repository"/> </para
></listitem>
</varlistentry>
<varlistentry>
<term
><menuchoice
><guimenu
>Repositorio</guimenu
><guimenuitem
>Descargar</guimenuitem
> </menuchoice
></term>
<listitem
><para
>Abre un diálogo para permitirle descargar un determinado módulo del repositorio.Vea <xref linkend="checkingout"/>. </para
></listitem>
</varlistentry>
<varlistentry>
<term
><menuchoice
><guimenu
>Repositorio</guimenu
><guimenuitem
>Importar</guimenuitem
> </menuchoice
></term>
<listitem
><para
>Abre un diálogo para permitirle importar un paquete al repositorio. Vea <xref linkend="importing"/>. </para
></listitem>
</varlistentry>
<varlistentry>
<term
><menuchoice
><guimenu
>Repositorio</guimenu
><guimenuitem
>Repositorios</guimenuitem
> </menuchoice
></term>
<listitem
><para
>Configura una lista de repositorios que use a menudo junto con la forma de acceder a ellos. Vea <xref linkend="accessing-repository"/>. </para
></listitem>
</varlistentry>
</variablelist>
</sect2>
<!-- Settings Menu -->
<sect2 id="menuoptions">
<title
>El menú Preferencias</title>
<variablelist>
<varlistentry>
<term
><menuchoice
><guimenu
>Preferencias</guimenu
><guimenuitem
>Mostrar barra de herramientas</guimenuitem
> </menuchoice
></term>
<listitem
><para
>Determina si la barra de herramientas debe o no mostrarse. </para
></listitem>
</varlistentry>
<varlistentry>
<term
><menuchoice
><guimenu
>Preferencias</guimenu
><guimenuitem
>Crear directorios al actualizar</guimenuitem
> </menuchoice
></term>
<listitem
><para
>Determina si al actualizarse deben crearse nuevas carpetas en nuestra copia de trabajo (opción <option
>-d</option
> del comando <command
>cvs update</command
>). </para
></listitem>
</varlistentry>
<varlistentry>
<term
><menuchoice
><guimenu
>Preferencias</guimenu
><guimenuitem
>Eliminar directorios vacíos a actualizar</guimenuitem
> </menuchoice
></term>
<listitem
><para
>Determina si deben eliminarse directorios vacíos al actualizar nuestra copia local (opción <option
>-P</option
> del comando <command
>cvs update</command
>). </para
></listitem>
</varlistentry>
<varlistentry>
<term
><menuchoice
><guimenu
>Preferencias</guimenu
><guimenuitem
>Actualizar recursivamente</guimenuitem
> </menuchoice
></term>
<listitem
><para
>Determina si las actualizaciones deben ser o no recursivas (opción <option
>-r</option
> del comando <command
>cvs update</command
>). </para
></listitem>
</varlistentry>
<varlistentry>
<term
><menuchoice
><guimenu
>Preferencias</guimenu
><guimenuitem
>Entregar y eliminar recursivamente</guimenuitem
> </menuchoice
></term>
<listitem
><para
>Determina si las entregas y eliminaciones deben hacerse o no recursivamente (opción <option
>-r</option
> del comando <command
>cvs add</command
> y <command
>cvs remove</command
> respectivamente). </para
></listitem>
</varlistentry>
<varlistentry>
<term
><menuchoice
><guimenu
>Preferencias</guimenu
><guimenuitem
>Hacer cvs edit automáticamente cuando sea necesario</guimenuitem
> </menuchoice
></term>
<listitem
><para
>Determinar si el comando <command
>cvs edit</command
> debe ejecutarse automáticamente cada vez que edite un archivo. </para
></listitem>
</varlistentry>
<varlistentry>
<term
><menuchoice
><guimenu
>Preferencias</guimenu
><guimenuitem
>Configurar atajos de teclado</guimenuitem
> </menuchoice
></term>
<listitem
><para
>Abre un diálogo para configurar atajos de teclado. </para
></listitem>
</varlistentry>
<varlistentry>
<term
><menuchoice
><guimenu
>Preferencias</guimenu
><guimenuitem
>Configurar barras de herramientas</guimenuitem
> </menuchoice
></term>
<listitem
><para
>Abre un diálogo para configurar las barras de herramientas de &cervisia;. </para
></listitem>
</varlistentry>
<varlistentry>
<term
><menuchoice
><guimenu
>Preferencias</guimenu
><guimenuitem
>Configurar Cervisia</guimenuitem
> </menuchoice
></term>
<listitem
><para
>Abre un diálogo para permitirle personalizar varios parámetros de &cervisia;. </para
></listitem>
</varlistentry>
</variablelist>
</sect2>
<!-- Help -->
<sect2 id="menuhelp">
<title
>El menú ayuda</title>
<variablelist>
<varlistentry>
<term
><menuchoice
><shortcut
><keycap
>F1</keycap
></shortcut
> <guimenu
>Ayuda</guimenu
><guimenuitem
>Manual de Cervisia</guimenuitem
> </menuchoice
></term>
<listitem
><para
>Abre el manual de &cervisia; en el centro de ayuda de KDE (es decir este documento). </para
></listitem>
</varlistentry>
<varlistentry>
<term
><menuchoice
><guimenu
>Ayuda</guimenu
><guimenuitem
>Informar de fallo...</guimenuitem
> </menuchoice
></term>
<listitem
><para
>Abre el diálogo para enviar fallos. </para
></listitem>
</varlistentry>
<varlistentry>
<term
><menuchoice
><guimenu
>Ayuda</guimenu
> <guimenuitem
>Acerca de &cervisia;</guimenuitem
> </menuchoice
></term>
<listitem
><para
>Esto mostrará información sobre la versión y el autor. </para
></listitem>
</varlistentry>
<varlistentry>
<term
><menuchoice
><guimenu
>Ayuda</guimenu
><guimenuitem
>Acerca de KDE</guimenuitem
> </menuchoice
></term>
<listitem
><para
>Muestra la versión de KDE y otra información básica. </para
></listitem>
</varlistentry>
<varlistentry>
<term
><menuchoice
><guimenu
>Ayuda</guimenu
><guimenuitem
>Manual del CVS</guimenuitem
> </menuchoice
></term>
<listitem
><para
>Abre las páginas info de &CVS; en el sistema de ayuda de KDE. </para
></listitem>
</varlistentry>
</variablelist>
</sect2>
</sect1>
</chapter>
<chapter id="credits-and-licenses">
<title
>Créditos y licencias</title>
&underFDL; &underGPL; </chapter>
</book>
|