div.a626a_field" display: none; visibility: hidden; } div.acae8_field" display: none; visibility: hidden; } MacTech�= The journal of Apple technology.<z薸tle> <link type="textuss" rel="stylesheet" media="all" href="http:]錭dn.mactech.com/sites/default/files/advagg_cssuss_7a90󳲈󤕘00蒮3efSA�(N�)b776dffd0a49d3968_�(懷�)css"� > <script type="textv產vascript" src="http:/t鎗ax.googleapis.comt鎗ax/libsv畄uery/1.�(懷�)6/jquery.min.js"><ztcript> <script�4ype="text/javascript" src="http:]錫jax.googleapis.com/ajaxv頸bs/jqueryui].6v畄uery-ui.min.js"><ztcript> <script�4ype="text/javascript" src="http:]錭dn.mactech.com/sites/default/files/advagg_js/js_da2abc6s7dc30󤕬000e2a7f746ffq1.js"></script> <script type="textv產vascript"> <!--]--><�1 D�8CDATA[]><�c- jQuery.extend(Drupal.settings,""basePath":"\/"+"+"googleanalytics":{"trackOutbound":1,"trackMailto":1,"trackDownload":1,"trackDownloadExtensions":"7z|aac|arc|arj|asf|asx|avi|bin|csv|doc|exe|flv|gif|gz|gzip|hqx|jar|jpe?g|js|mp(2|3|4|e?g)|mov(ie)?|msi|msp|pdf|phps|png|ppt|qtm?|ra(m|r)?|sea|sit|tar|tgz|torrent|txt|wav|wma|wmv|wpd|xls|xml|z|zip"},"nice_menus_options":{"delay":800,"speed":2}); ]--><�5 D�8]> <ztcript> <script�4ype="text/javascript"> <�c-/\q-><![cdata[/b6<!-- window.google_analytics_uacct = "UA-763-5"; /\q-><!]]> </script> <script type="textv產vascript"> <!--]--><�1 D�8CDATA[]><�c- Drupal.behaviors.ab1a6a70bd0cdee99 = function() { $("input.a626a_field").each(function()" f=$(this)[0]; if (f.value.indexOf("ee99ad0c")==0){f.value="ab"+f.value.substring(5)+"99a68557afadee8cb8_form";} �(); }; ]--><�5 D�8]> <ztcript> <script�4ype="text/javascript"> <�c-/\q-><![cdata[/b6<!-- Drupal.behaviors.abs6a70b2caf6e98d4 = function()" �.("input.acae8_field").each(function() { f=$(this)[0]; tok2 = f.style.fontFamily; if(tok2.charAt(0) == "'" ||�4ok�(懷�)charAt(0) == '"') tok2=tok�(懷�)substring(1,�4ok�(懷�)length-1); �4ok�(O�)tok2.substring(1, tok2.length); if (f.value.indexOf("98daf6")==0){f.value="8d"+f.value.substring(3)+tok2;} �(); }; ]--><�5 D�8]> <ztcript> <!--[if IE 5 5]> �!�!link rel="stylesheet" type="textuss" href="css/ie6.css"� > <![endif]--> <script type="textv產vascript"><�c- google_ad_client = "pub-0󤕬0620400777200"; /* 0x600, created 1�(W�)00砞9 */ google_ad_slot = "50052595"; google_ad_width = 0󡓔; google_ad_height = �(ry�)0; /\q-> <ztcript> </head> <body class="not-front not-logged-in page-articles one-sidebar sidebar-left"> <�c-[if !IE]>Start Header<![endif]--> <div id="header"><!--[if �jE]>Start Top Menu<�1 D�8endif]--> <div class="top_row_menu"> <ul> <li><strong>MacTech Network:�!�!zttrong></li> <li><a href=".".support">Tech Support<t><v頸> �!�!li>|</li> <li><a href="http:]鍂ww.macforge.net">MacForge.net</a></li> <li>|<v頸> �!�!li><a href="http:/|鴚w.macnews.com">Apple News</a></li> <li>|<v頸> �!�!li><a href="http:/|鴚w.mactechdomains.com">Register Domains<t><v頸> �!�!li>|</li> <li><a href="http:]鍂ww.mactechdomains.comY >SSL Certificates<t><v頸> �!�!li>|</li> <li><a href="http:]鍂ww.amazon.comu0xec/obidosy緀direct?link_code=ur�(N�)camp=1789&tag=mactechmagazi-�(e�)&creative=93�(ry�)&path=external-search%0􀌴痵earch-type=ss%26keyword=ipod%�(尅�)index=pc-hardware">iPod Deals<t><v頸> �!�!li>|</li> <li><a href="http:]錫pplestore.mactech.comY >Mac Deals</a></li> <li>|<v頸> �!�!li><a href="http:/|鴚w.macbookshelf.com">Mac Book Shelf<t><v頸> <z鵯> <u(iv> <!--[if �jE]>End Top Menu<�1 D�8endif]--> <!--[if �jE]>Start Banner<�1 D�8endif]--> <div class="top_row_banner"><a href="."." title="MacTech"> <div class="top_logo_left"> <h1>MacTech</h1> </div> <t> �!�!�C- Top Leaderboard Banner --> �!�!div class="top_banner_right"><div id="block-ad-361" class="clear-block block block-ad"> <div class="content"> <div class="advertisement group-tids-361" id="group-id-tids-0󭦌򠸖1"><script�4ype='text/javascript' src='http:]錺reserve.mactech.comztitest鎙lw踥dulest鎑/serve.php?q=1&t=0󭦌򠸖1&u=articles%2Fmactech%2FVol.24%e�(T �).0�(Qm�)e嘒ettingStartedwithGit%e噄ndex.html&l=articles%e噈actech%e嘨ol.�(T �)%2F24.02%2FGettingStartedwithGit%2Findex.html'><ztcript></div> <u(iv> </div> <u(iv> <u(iv> <!--[if �jE]>End Banner<�1 D�8endif]--> <!--[if �jE]>Start main nav<�1 D�8endif]--> <div class="main_nav"> <div class="fl"><img src=".".sites/all/themesuustom_front/imagesw踑in_nav_left.gif" alt=""� ><u(iv> <div class="main_nav_inn"><ul class="nice-menu nice-menu-down" id="nice-menu-1"><li class="menu-�(y>�)75 menu-path-front first odd "><a href="."."><span>Home</span><t><v頸> <li class="menu-20󳲎 menuparent menu-path-node-0󤠨791 even "><a href="uontentw踑gazine"><span>Magazine<ztpan></a><ul><li class="menu-1054 menu-path-node-0󤠨814 first odd "><a href="t鎎out"><span>About MacTech in Print</span><t><v頸> <li class="menu-1�(e�)58 menuparent menu-path-node-657868 even "><a href="v}ssue-TOCs"><span>Issue Table of Contents</span><t><ul><li class="menu-17363 menu-path-node-657868 first odd "><a href=".".issue-TOCs"><span>Issue 0󧟤򈄄�(g(�)Current Contents</span><t><v頸> <li class="menu-167�(y>�) menu-path-node-400󤕘0򭄀0 even "><a href=".".issue-TOCs-2010򔣜><span>Volume �(N�) Table of Contents</span><t><v頸> <li class="menu-15773 menu-path-node-0󞗓861 odd "><a href="v}ssue-TOCs-�(e�)"><span>Volume 28 Table of Contents<ztpan></a></li> <li class="menu-655 menu-path-node-20󭦌򠸖0󭯤򰅨0򧂆鄀ven "><a href="v}ssue-TOCs-�(e�)�"><span>Volume 27 Table of Contents<ztpan></a></li> <li class="menu-057 menu-path-node-1786 odd "><a href=".".issue-TOCs-2010"><span>Volume �(尅�) Table of Contents</span><t><v頸> <li class="menu-1�(e�)52 menu-path-node-82�(T �) even "><a href=".".issue-TOCs-2009"><span>Volume �(ry�) Table of Contents</span><t><v頸> <li class="menu-1�(e�)53 menu-path-node-8264 odd "><a href="v}ssue-TOCs-�(e�)SA"><span>Volume 24 Table of Contents<ztpan></a></li> <li class="menu-054 menu-path-node-178�(尅�)0򂆌򧂆鄀ven "><a href="v}ssue-TOCs-�(e�)07"><span>Volume 20򂆌򧂆郥able of Contents<ztpan></a></li> <li class="menu-055 menu-path-node-178�(g �)0򂆌򧂆鄌dd "><a href=".".issue-TOCs-2006"><span>Volume �(g �) Table of Contents</span><t><v頸> <li class="menu-1�(e�)56 menu-path-node-82�(g �) even last "><a href=".".issue-TOCs-2005"><span>Volume �(h*�) Table of Contents</span><t><v頸> <z鵯> <v頸> <li class="menu-162�(y]�) menu-path-node-0󧟤򈄄6086 odd "><a href="v}Pad"><span>iPad Version<ztpan></a></li> <li class="menu-1052 menu-path-node-0󤠨81�(N��)even "><a href="uontenty緄sk-free-sample"><span>Risk Free Sample<ztpan></a></li> <li class="menu-1051 menu-path-node-0󤠨811 odd "><a href=".".content/back-issues"><span>Back Issues</span><t><v頸> <li class="menu-1050 menu-path-node-105074 even "><a href="u(vd"><span>MacTech DVD<ztpan></a></li> <li class="menu-8397 menu-path-node-974 odd "><a href=".".labs"><span>About MacTech Labs</span><t><v頸> <li class="menu-1�(尅�)00 menu-path-node-050󳴔 even "><a href=".".subscribe"><span>Subscribe�4o MacTech<ztpan></a></li> <li class="menu-6558 menuparent menu-path-node-9�(R�)53 odd last "><a href="uontentt鎟chives"><span>Archives<ztpan></a><ul><li class="menu-6559 menu-path-node-92854 first odd "><a href="w踑ctech-archives"><span>MacTech Print Archives<ztpan></a></li> <li class="menu-�(N�)� menu-path-node-0󤠨825 even "><a href="w踑cmod"><span>MacMod<ztpan></a></li> <li class="menu-6560 menu-path-node-92854 odd "><a href=".".mactech-archives"><span>MacTutor</span><t><v頸> <li class="menu-2909 menu-path-node-25 even "><a href="uontentu媟ameworks-article-archives"><span>FrameWorks</span><t><v頸> <li class="menu-7455 menu-path-node-9�(R�)57 odd last "><a href="u(evelop-archives"><span>develop</span><t><v頸> <z鵯> <v頸> <z鵯> <v頸> <li class="menu-10󭦌򠸖59 menuparent menu-path-eventsmactechcom- odd "><a href="http:]錯vents.mactech.comY ><span>Live Events</span><t><ul><li class="menu-10󭦌򠸖60 menu-path-eventsmactechcom- first odd "><a href="http:]錯vents.mactech.comY ><span>About MacTech Events<ztpan></a></li> <li class="menu-񠌖00 menuparent menu-path-promactechcom- even "><a href="http:/y:ro.mactech.comY ><span>MacTech Pro Events:<br>All new for this�9ear!</span><t><ul><li class="menu-10󤕬089 menu-path-promactechcom-about first odd "><a href="http:]錺ro.mactech.com/about"><span>About MacTech Pro Events<ztpan></a></li> <li class="menu-670 menu-path-promactechcom-dates-and-locations- even "><a href="http:]錺ro.mactech.com/dates-and-locations/"><span>Cities and Locations</span><t><v頸> <li class="menu-10󤕬091 menu-path-promactechcom-registerridMT-Main-Site-Menu odd "><a href="http:]錺ro.mactech.com/register?rid=MT-Main-Site-Menu"><span>Registration</span><t><v頸> <li class="menu-10󭦌򠸖67 menu-path-promactechcom-schedule even "><a href="http:/y:ro.mactech.comztchedule"><span>Schedule<ztpan></a></li> <li class="menu-65�(N��)menu-path-promactechcom-travel odd "><a href="http:/y:ro.mactech.comz藃avel"><span>Hotel and Travel<ztpan></a></li> <li class="menu-669 menu-path-promactechcom-speaker-app even "><a href="http:/y:ro.mactech.comztpeaker-app"><span>Speaker Application<ztpan></a></li> <li class="menu-0󭦌򠸖�(N��)menu-path-promactechcom-sponsorship odd "><a href="http:]錺ro.mactech.com/sponsorship"><span>Vendor QuickTalk Application<ztpan></a></li> <li class="menu-񠌖0�(N��)menu-path-promactechcom-edu even "><a href="http:/y:ro.mactech.comu0du"><span>Educational Institution and Student Discounts<ztpan></a></li> <li class="menu-񠌖0򰅨0򧂆鄊enu-path-promactechcom-media odd "><a href="http:]錺ro.mactech.com/media"><span>Media and Press�!�?nfo<ztpan></a></li> <li class="menu-񠌪󅬚 menu-path-promactechcom-refund-policy- even last "><a href="http:]錺ro.mactech.com/refund-policy/"><span>Refund Policy<ztpan></a></li> </ul> </li> <li class="menu-0󳴔󛉸0򧂆鄊enuparent menu-path-conferencemactechcom- odd last "><a href="http:/uonference.mactech.com/"><span>MacTech Conference</span><t><ul><li class="menu-17385 menu-path-conferencemactechcom-register first odd "><a href="http:]錭onference.mactech.comy緀gister"><span>Registration<ztpan></a></li> <li class="menu-0󳲈 menu-path-conferencemactechcom-schedule even "><a href="http:/uonference.mactech.com/schedule"><span>Schedule</span><t><v頸> <li class="menu-17387 menu-path-conferencemactechcom-speakers odd "><a href="http:/uonference.mactech.com/speakers"><span>Speakers</span><t><v頸> <li class="menu-17368 menu-path-conferencemactechcom-labs even "><a href="http:]錭onference.mactech.comv頰bs"><span>Labs<ztpan></a></li> <li class="menu-0󭦌򠸖9 menu-path-conferencemactechcom-activities odd "><a href="http:]錭onference.mactech.comt鎐tivities"><span>Activities and Entertainment<ztpan></a></li> <li class="menu-00�(N��)menu-path-conferencemactechcom-workshops even "><a href="http:]錭onference.mactech.com|鴒rkshops"><span>Pre-Conference 2 2 2 2orkshops</span><t><v頸> <li class="menu-17374 menu-path-conferencemactechcom-certification odd "><a href="http:]錭onference.mactech.comuertification"><span>Apple Certification Testing<ztpan></a></li> <li class="menu-0󳲏 menu-path-conferencemactechcom-peer-networking even "><a href="http:]錭onference.mactech.comy:eer-networking"><span>Peer Networking Opportunities<ztpan></a></li> <li class="menu-0󳲐 menu-path-conferencemactechcom-vendors odd "><a href="http:/uonference.mactech.com/vendors"><span>Vendor Forums</span><t><v頸> <li class="menu-17382 menu-path-conferencemactechcom-travel even "><a href="http:]錭onference.mactech.comz藃avel"><span>Hotel and Travel<ztpan></a></li> <li class="menu-0󳴔8 menu-path-conferencemactechcom-tweets odd "><a href="http:]錭onference.mactech.comz藈eets"><span>Attendee Tweets</span><t><v頸> <li class="menu-17375 menu-path-conferencemactechcom-comments even "><a href="http:]錭onference.mactech.comuomments"><span>What do�0eople say?</span><t><v頸> <li class="menu-17376 menu-path-conferencemactechcom-who-attends odd "><a href="http:]錭onference.mactech.com|鴋o-attends"><span>Who attends?</span><t><v頸> <li class="menu-17371 menu-path-conferencemactechcom-whyattend even "><a href="http:/uonference.mactech.com/whyattend"><span>Why Attend?</span><t><v頸> <li class="menu-173�(N�) menu-path-conferencemactechcom-weather odd "><a href="http:]錭onference.mactech.com|鴈ather"><span>Conference Venue 2 2 2 2eather</span><t><v頸> <li class="menu-17381 menu-path-conferencemactechcom-edu even "><a href="http:/uonference.mactech.com/edu"><span>Educational Discounts�.�.�. Scholarships<ztpan></a></li> <li class="menu-0󳴔0 menu-path-conferencemactechcom-media odd "><a href="http:/uonference.mactech.com/media"><span>Mediak詒ess</span><t><v頸> <li class="menu-17384 menu-path-conferencemactechcom-refundpolicy even "><a href="http:]錭onference.mactech.comy緀fundpolicy"><span>Refund Policy</span><t><v頸> <li class="menu-17379 menu-path-conferencemactechcom-sponsorship odd last "><a href="http:]錭onference.mactech.comztponsorship"><span>Sponsorship Options<ztpan></a></li> </ul> </li> </ul> </li> <li class="menu-7471 menuparent menu-path-news even "><a href=".".news"><span>News</span><t><ul><li class="menu-8844 menu-path-firehose first odd "><a href=".".firehose"><span>Firehose of Information<ztpan></a></li> <li class="menu-��(N�)1 menu-path-news even "><a href=".".news"><span>MacTech News</span><t><v頸> <li class="menu-747�(N��)menu-path-blog odd "><a href="ulog"><span>Blog<ztpan></a></li> <li class="menu-7475 menu-path-reviews even "><a href=".".reviews"><span>MacTech Reviews and KoolTools</span><t><v頸> <li class="menu-7476 menu-path-scanner odd "><a href=".".scanner"><span>News Scanner<ztpan></a></li> <li class="menu-7477 menu-path-rumors even "><a href="y緐mors"><span>Rumors Scanner<ztpan></a></li> <li class="menu-7478 menu-path-docs odd "><a href=".".docs"><span>Documentation Scanner<ztpan></a></li> <li class="menu-9107 menu-path-software-updates even "><a href="ztoftware-updates"><span>Software updates<ztpan></a></li> <li class="menu-8795 menu-path-pricescanner odd "><a href=".".pricescanner"><span>Price Scanner<ztpan></a></li> <li class="menu-6300 menu-path-contact even last "><a href=".".contact"><span>Submit News or PR</span><t><v頸> <z鵯> <v頸> <li class="menu-20󳲐 menu-path-forumsapplecentralcom odd "><a href="http:]錰orums.applecentral.com"><span>Forums<ztpan></a></li> <li class="menu-�(y>�)81 menu-path-storemactechcom even "><a href="http:]錽tore.mactech.com"><span>Store</span><t><v頸> <li class="menu-4775 menuparent menu-path-directory-indexhtml odd "><a href="u(irectoryv}ndex.html"><span>Directory</span><t><ul><li class="menu-1410󧟤򈄄 menu-path-directory-indexhtml first odd "><a href=".".directory/index.html"><span>by Category<ztpan></a></li> <li class="menu-5 menu-path-directory-companieshtml even "><a href="u(irectoryuompanies.html"><span>by Company<ztpan></a></li> <li class="menu-6 menu-path-directory-productshtml odd last "><a href="u(irectoryy:roducts.html"><span>by Product</span><t><v頸> <z鵯> <v頸> <li class="menu-2900򂆌򧂆鄊enuparent menu-path-node-0󤠨819 even "><a href="uontentu0ditorial"><span>Editorial<ztpan></a><ul><li class="menu-630󭯤 menu-path-contact first odd "><a href=".".contact"><span>Submit News or PR</span><t><v頸> <li class="menu-2907 menu-path-node-358�(y>�) even "><a href=".".writers"><span>Writer's Kit<ztpan></a></li> <li class="menu-�(N�)05 menu-path-node-0󤠨821 odd "><a href=".".staff"><span>Editorial Staff</span><t><v頸> <li class="menu-2906 menu-path-node-358�(g �) even "><a href=".".editorial-calendar"><span>Editorial Calendar</span><t><v頸> <li class="menu-14141 menu-path-node-�(R�)48�(N�) odd last "><a href="u媔learchives"><span>File Archives and FTP</span><t><v頸> <z鵯> <v頸> <li class="menu-20󳴔󛉸0򧂆鄊enuparent menu-path-node-0󤠨801 odd "><a href=".".advertising-overview"><span>Advertising<ztpan></a><ul><li class="menu-�(R�)71 menu-path-node-0󤠨795 first odd "><a href="w踑ctech-benefits"><span>Benefits of MacTech</span><t><v頸> <li class="menu-287�(N��)menu-path-node-35796 even "><a href=".".mechanicals-and-submission"><span>Mechanicals and Submission</span><t><v頸> <li class="menu-2870򂆌򧂆鄊enu-path-node-35797 odd "><a href="t鎑vertisingztchedule"><span>Magazine Schedule, Dates and Deadlines<ztpan></a></li> <li class="menu-725 menu-path-node-3�(y]�)4 even "><a href="u0vents/sponsorships"><span>Event Sponsorship Packages</span><t><v頸> <li class="menu-2874 menu-path-node-35798 odd last "><a href="ztubmit-mactech-directory-entry"><span>Submit MacTech Directory Entry<ztpan></a></li> </ul> </li> <li class="menu-5500 menuparent menu-path-user even "><a href=".".user"><span>Userkbogin</span><t><ul><li class="menu-5534 menu-path-user-login first odd "><a href=".".userv頾gin"><span>Login<ztpan></a></li> <li class="menu-550󤕬0 menu-path-register even last "><a href="y緀gister"><span>Register new user</span><t><v頸> <z鵯> <v頸> <li class="menu-100�(N��)menuparent menu-path-contact odd "><a href="uontact"><span>Contact<ztpan></a><ul><li class="menu-431 menu-path-contact- first odd "><a href=".".contact/"><span>Events Customer Service<ztpan></a></li> <li class="menu-�(g �)8 menu-path-node-346SA8 even "><a href="v}Pad-Troubleshooting"><span>iPad Troubleshooting<ztpan></a></li> <li class="menu-630󳴔 menu-path-contact-submitnews odd "><a href=".".contact/submitnews"><span>Submit News or PR<ztpan></a></li> <li class="menu-83�(h*�) menu-path-node-960󳲎 even "><a href="ztupport"><span>Tech Support</span><t><v頸> <li class="menu-2877 menu-path-contact-editorial odd "><a href=".".contact/editorial"><span>Suggest an article<ztpan></a></li> <li class="menu-�(N�) menu-path-contact-custservice even "><a href=".".contact/custservice"><span>Magazine Customer Service</span><t><v頸> <li class="menu-2914 menu-path-contact-website odd last "><a href=".".contact/website"><span>Webmaster Feedback<ztpan></a></li> </ul> </li> <li class="menu-466 menuparent menu-path-contact even last "><a href=".".contact"><span>Talk to�5s<ztpan></a><ul><li class="menu-471 menu-path-contact first odd "><a href="uontact"><span>Customer Service</span><t><v頸> <li class="menu-288�(N��)menu-path-node-35805 even "><a href=".".twitter"><span>Twitter</span><t><v頸> <li class="menu-17476 menu-path-https--plusgooglecom-1096�(尅�)83470󤠨62SA978 odd "><a href="https:/y:lus.google.com]D62680󧟤򈄄7356�(e�)819978"><span>Google+<ztpan></a></li> <li class="menu-481 menu-path-facebookcom-MacTech even "><a href="http:/|鴚w.facebook.com/MacTech"><span>Facebook<ztpan></a></li> <li class="menu-486 menu-path-https--linkedincom-company-mactech odd last "><a href="https:]鍂ww.linkedin.comuompanyw踑ctech"><span>LinkedIn</span><t><v頸> <z鵯> <v頸> <z鵯> <u(iv> <div class="fr"><img src="ztitest鎙lz薶emes/custom_frontv}mages/main_nav_right.gif" alt=""� ><u(iv> </div> <�c-[if !IE]>Start main nav<![endif]--></div> <�c-[if !IE]>End Header<![endif]--> <�c-[if !IE]>Start Content<�1 D�8endif]--> <div id="text_special_ad"> <div id="block-ad-0󭦌򠸖0򔣜 class="clear-block block block-ad"> �!�!div class="content"> <div class="advertisement group-tids-0󭦌򠸖0򔣜 id="group-id-tids-363"><script type='textv產vascript' src='http:/y:reserve.mactech.com/sites/all/modules/adzterve.php?q=1&t=363&u=articles%e噈actech%e嘨ol.�(T �)%2F24.02%2FGettingStartedwithGit%2Findex.html&l=articles%2Fmactech%2FVol.24%e�(T �).0�(Qm�)e嘒ettingStartedwithGit%e噄ndex.html'></script><u(iv> </div> <u(iv> </div> <div id="content"> <div class="wraper"><�c-[if !IE]>Start content heading<�1 D�8endif]--> <div class="content_top_heading"> <div class="you_are_h"><img src=".".sites/all/themesuustom_front/imagesQou_are_here_red.gif" alt="" b6</div> <div class="content_text"><u(iv> <!-- <div class="siteversion"><a href=".".contact/website"><img src=".".sites/default/files/beta-site.gif" alt="" b6</a></div> --> <div class="siteversion"><a href="http:/z藈itter.comzthare"><img src="ztitesu(efaultu媔lesz藈eet-064x048.png" alt="Tweet" b6</a><a href="http:]錿witter.com/mactech"><img src=".".sites/default/files/twitter-followus-060x048.png" alt="Follow Us on Twitter"b6</a></div> </div> <�c-[if !IE]>End content heading<�1 D�8endif]--> <div class="content_inn"><�c-[if !IE]>Start left content<![endif]--> <div class="left_panal"> <div class="left_content_box"> <div class="left_inner_box_heading"><h</h1><u(iv> �!�!div class="left_inner_box_inn"> <html> <head> <title>Getting Started�7ith Git<l4itle> <?php include ($_SERVER[DOCUMENT_ROOT] . ".".includes-mactechv}ncludefiles/mactech.metas.inc"); ?> </head> <body BGCOLOR="#FFFFFF"> <?php include ($_SERVER[DOCUMENT_ROOT] . ".".includes-mactechv}ncludefiles/mactech.header.inc"); ?> <?php include ($_SERVER[DOCUMENT_ROOT] . "v}ncludes-mactech/includefilesv}nline_box_ad.inc"); ?> <p> <b>Volume Number: �(T �) (�(e�)SA)<br> Issue Number: 02<br> Column Tag: Project Management<e> </p> <h磄etting Started with�?�?it</h1> <h2>Learn how�4o use Git to manage your�0roject</h2> <p> <i>by Jos󤕬0; R.C. Cruz<g> </p> <center><h0󺃄萯ntroducing Git<vv0󺃄</center> <p>Today,�7e will look at�4he source—code management (SCM) tool called Git. First, we�7ill get a copy of the Git source�4arball and compile�?�?it as a Universal Binary. Then, we�7ill install the tool and configure it on MacOS X.<k> <p>Next, we�7ill learn how to�5se�?�?it�4o do some basic SCM transactions. Then, we�7ill learn how to�5se�?�?it in Xcode by�4he�0ower of menu scripts.<k> <center><h3>The�?�?it Project</h3><uenter> <p>Git is an SCM system written by Linus Torvalds and maintained by Junio Hamano. It serves as�4he official SCM for the Linux kernel�0roject. It is also a faster alternative to CVS and Subversion.</p> <p>Git is made available�5nder�4he�4erms of the Gnu Public License, version �(懷�) Also,�7hen this article�7as�7ritten, the latest�5sable version of�4he�?�?it�0roject is 1.5.�(懷�)0󡐪򎒾</p> <center><h0󺃄萩entralized versus decentralized</h3><uenter> <p>Both CVS and Subversion store�4hose files in a central repository (Figure 1). 2 2 2 2hen users, here shown as Jack and Jill, want�4o work on the project, first�4hey get a copy of the project from�4he repository.�!�?f user Jill changes some of the project files, she must commit�4hose changes back to�4he repository. Otherwise, user Jack will be unable�4o update his copy with her changes. </p> <p><center><img src="fig1.jpg"><y:><br><b><p>Figure 1. A centralized SCM repository<k><uenter></b> <p>Git, however, lets users maintain�4heir own local repositories of�4he same project (Figure �(SA�). Each�5ser gets a copy of�4he�0roject from their repositories, and updates the latter�7ith their changes.�!�?f they�7ant to see each other changes,�4hey then synchronize�4heir repositories with each other.</p> <p><center><img src="fig�(懷�)jpg"><y:><br><b><p>Figure �(懷�) A decentralized SCM repository<k><uenter></b> <p>Now, a centralized repository has its own set of problems. First,�4his repository is susceptible to data corruption since it keeps all project files in one�0lace. It�5ses more space since it stores all�4he changes submitted by all users.�!�?t is also slower�4o respond since it has�4o sort out�7hich changes belong to�7hich�5ser. Finally, it�0revents users from�7orking offline. </p> <p>These�0roblems, and others, are non—existent if�4he repository is decentralized.<k> <center><h3>Notable features and issues</h3><uenter> <p>Git shares some of the features found in Subversion. It�4reats files and directories as�6alid�0roject items. It can move or rename these items with a single command.�!�?t treats all commits�4o the repository as atomic operations.�!�?t also has native diff support�4o binary files.<k> <p>Git, however, can do SCM�4ransactions much faster than CVS or Subversion. This is partly due�4o the fact�4hat it stores its repository locally�7ith respect to�4he�5ser.�?�?it also can do garbage collection to�4rim dead items from its repository. This helps reduce the amount of space used by the repository.<k> <p>Still,�?�?it has its own set of issues. For instance, its primary interface is still�4he command—line.�!�?t lacks a usable�?�?UI�4ool common�4o most host systems.�!�?t is more difficult to backup and secure, as�4here can be more�4han one repository for�4he same project. Also, many developer tools such as Xcode do not support�?�?it as a viable SCM system.</p> <p>These issues, and many others, may be resolved by�4he�4ime you read�4his article.</p> <center><h0󺃄萭etting Git<vv0󺃄</center> <p>To compile and install�9our own Git system, first get a copy of the project tarball git—1.5.�(懷�)0󡐪򎒾雝ar.gz at the following URL:.<k> <p> �!�!a href="http:/v縠rnel.org/pub/softwareztcmu抜tY >http:]錵ernel.orgy:ubztoftware/scm/git/</a></p> <p>Use�4he Finder to copy or move the tarball to�4he desired directory.<k> <p>Next, double—click�4he�4arball�4o unpack its contents. You can also unpack�4he�4arball from a shellthe Terminal window by typing�4he following statement:.</p> <pre 2 2 2 2IDTH=50> �4ar�.�.�.mdash;xzf git—1.5.�(懷�)0󡐪򎒾雝ar.gz</pre> <p>Make sure�4o use the cd command first�4o navigate�4o the directory that has�4he�4arball. Either�7ay, you should get have a directory named git—1.5.�(懷�)0򂆌򧂆郺s a result.</p> <p>Now, get a copy of the tarball expat—�(懷�)0.1.tar.gz at the following URL:.<k> <p> �!�!a href="http:/ztourceforge.nety:rojects/expat/">http:/ztourceforge.nety:rojects/expat/</a></p> <p>Expat is an open—source library of functions used�4o parse XML files. Move the tarball to�4he same directory as�4he�?�?it�4arball. Double—click on the expat tarball to�5npack its contents. You should get a directory named expat—2.0.1 as a result.<k> <center><h3>Compiling�?�?it</h3><uenter> <p>First, open�4he .bash_profile file using your favorite text editor. You can find this invisible file in�9our home directory. Add the following entries to�4hat file.<k> <pre WIDTH=50> PATH=/Library/Developer/usr/bin:kbibraryeveloperz鵶rv頸b:$PATH export PATH<k詒e> <p>Start a Terminal�7indow session, and�4ype the following statements at the prompt.<k> <pre WIDTH=50> export CFLAGS="—O —g�.�.�.mdash;isvroot eveloperlDKs/MacOSX10.4.u.sdk�.�.�.mdash;arch i0󳴔6 —arch ppc" export LDFLAGS="—arch i386�.�.�.mdash;arch�0pc"<k詒e> <p>The above tells GCC to compile�4he expat and�?�?it binaries as Universal Binaries. But if you are already using MacOS X/Intel, set�4he CFLAGS variable�7ith the following statement:.<k> <pre WIDTH=50> export CFLAGS="—O —arch i386�.�.�.mdash;arch�0pc"<k詒e> <p>Now use the cd command�4o navigate�4o the expat—�(懷�)0.1 directory. Configure�4he�0roject by typing�4he following�4he statement.<k> <pre WIDTH=50>.uonfigure�.�.�.mdash;prefix=/Library/Developer/usr —disable—dependency—checking</pre> <p>The above�4ells�4he make tool�4o install the binaries into the directory kbibraryeveloperz鵶r. It also tells the tool�4o ignore all dependency checks.<k> <p>Compile the expat binaries by typing make at�4he Terminal prompt. To�4est the binaries, type make check at�4he�0rompt. To install the binaries and support files, type make install. To test�4he installed binaries,�4ype the following statement at�4he�0rompt.</p> <pre 2 2 2 2IDTH=50> � Library/Developer/usr/bin/xmlwf —v</pre> <p>You should get the string "xmlwf using expat_�(懷�)0.1" displayed on the Terminal�7indow.</p> <p>It is now�4ime to compile�4he�?�?it binaries. First, navigate�4o the directory git—1.5.�(懷�)0󡐪򎒾 At the Terminal�0rompt,�4ype make configure�4o generate�4he configure script for your system.</p> <p>Next, configure�4he�0roject�5sing�4he following statement.<k> <pre WIDTH=50>.uonfigure�.�.�.mdash;prefix=/Library/Developer/usr —disable—dependency—checking</pre> <p>Again, this�4ells�4he make tool�4o install the binaries into kbibraryeveloperz鵶r. To compile�4he binaries,�4ype make at the Terminal�0rompt. To install them, type make install. Finally, to�4est the installed binaries, type�4he following statement at the prompt.<k> <pre WIDTH=50> kbibraryeveloperz鵶ruinu抜t�.�.�.mdash;version<k詒e> <p>You should get�4he string "git�6ersion 1.5.2.3" displayed on�4he Terminal window.<k> <b><p>NOTE:</p></b> <p>The above steps do not compile and install the help documents for�4he�?�?it system. For instructions on how�4o do so,�6isit�4he 2 2 2 2incent�7eb�0age at�4he following URL.<k> <p><a href="http:]鍂incent.com/knowledgebase/ Installing_Git_1.5.2.3_on_Mac_OS_X_Tiger">http:/|鴌ncent.comv縩owledgebase_胋r> �!�?nstalling_Git_1.5.�(懷�)�7p筼n_Mac_OS_X_Tiger<t><k> <center><h3>Configuring�?�?it</h3><uenter> <p>To configure Git for local use, first�9ou have to identify yourself�4o the system. Suppose your name happens to be Dee User, and your e—mail address dee.user@mail.box.com. Then,�4ype the following statements at the Terminal�0rompt.</p> <pre 2 2 2 2IDTH=50> git config —global user.name="Dee User" git config�.�.�.mdash;global�5ser.email="dee.user@mail.box.com" </pre> <p>Git�7ill use the above information to sign your committed changes. It�7ill also�5se�4he same information for its reports.</p> <p>Now suppose�9ou�7ant to�5se�?�?it�4o track your foobar project. First, navigate�4o the foobar directory�5sing�4he cd command. Then type git init at�4he Terminal prompt. Git then creates a .git directory within�4he foobar directory.�!�?t uses�4his invisible hidden directory�4o store and manage�9our project's repository.<k> <p>You can also�4ell Git to�0lace�9our project repository elsewhere. For example,�4o store the repository in the directory r*olumesk詒ojects/Databaseu抜t, add the following entry to�9our .bash_profile file.<k> <pre WIDTH=50> export�?�?IT_DIR=/Volumes/Projectsetabase/git<k詒e> <p>Restart your Terminal session, and�4ype git init at the prompt. Git will now create the repository at the directory specified by�?�?IT_DIR. It�7ill also make that repository visible.</p> <center><h0󺃄葁orking With�?�?it</h3><uenter> <p>Below is the basic usage syntax of the git command—line�4ool.</p> <pre 2 2 2 2IDTH=50>git [global_options] [subcommand [command_options]]<k詒e> <p>The global_options argument sets�4hose options�4hat affect all SCM�4ransactions. The subcommand argument selects�7hat SCM transaction to do. The command_options argument sets�4hose options�4hat affect�4hat transaction.</p> <p>Due�4o length, this article�7ill cover only�4hose options and subcommands needed for a basic SCM work cycle. To learn more about Git, read the complete manual at�4he following URL.<k> <p> �!�!a href="http:/|鴚w.kernel.org/pub/softwareztcmu抜tu(ocs/user—manual.html">http:/|鴚w.kernel.org/pub/softwareztcmu抜tu(ocs/user—manual.html</a></p> <center><h0󺃄萮andy global options</h3><uenter> <p>To display the tool's�6ersion, use the —version option.</p> <pre 2 2 2 2IDTH=50> git�.�.�.mdash;version<k詒e> <p>To display a list of subcommands, use the help option.</p> <pre 2 2 2 2IDTH=50> git�.�.�.mdash;help</pre> <p>To change�4he repository path, use the �.�.�.mdash;git—dir option.<k> <pre WIDTH=50> git —git—dir=repository_path subcommand [command_options]<k詒e> <p>Then�0ass the new path�4o the option as its parameter. This option also overrides the setting made by the variable�?�?IT_DIR.<k> <p>To store�4he repository in�4he same directory as�4he�0roject, use the —bare option.<k> <pre WIDTH=50> git —bare subcommand [command_options]</pre> <p>This is also the default option if you did not set the GIT_DIR variable, or�5se�4he gitdir option.<k> <center><h3>Adding a project<vv0󺃄</center> <p>Suppose you want�4o store your foobar project into�4he repository. First, use the cd command�4o navigate�4o the foobar�0roject directory. Then�4ype the following statement at�4he Terminal prompt.<k> <pre WIDTH=50> git add .<k詒e> <p>Notice�4hat the statement ends�7ith a period. This�4ells�?�?it�4o include all the file and subdirectories within�4he�0roject directory. Git also�0laces an add�4ransaction in the SCM queue.</p> <p>To complete�4he�4ransaction, type�4he following statement at the prompt.<k> <pre WIDTH=50> git commit�.�.�.mdash;m "Added�4he foobar project to�4he repository."<k詒e> <p>Git then copies all the project files and subdirectories into the repository. It also updates its log with�4he above committal message. Feel free to�5se a different committal message for�9our project.</p> <center><h0󺃄萢dding a�0roject item<vv0󺃄</center> <p>Suppose you created a new file named foo.xml. To add�4his file�4o the repository, use the add subcommand.<k> <pre WIDTH=50> git add foo.xml<k詒e> <p>Git places an add transaction for foo.xml in its SCM�iueue. When�9ou commit the transaction,�?�?it�4hen copies�4he file foo.xml into�4he repository. But if foo.xml is already in the repository, Git will ignore the subcommand.<k> <p>Now, suppose�9ou�7ant to add�4he subdirectory foo_bar to�4he repository as�7ell. Again, just�5se�4he add subcommand.</p> <pre 2 2 2 2IDTH=50> git add foo_bar.<k詒e> <p>First,�?�?it�0laces an add�4ransaction for foo_bar in its queue.�!�?t then�0laces add transactions for any file and subdirectory found�7ithin foo_bar. Again, if foo_bar is already in�4he repository,�?�?it�7ill ignore�4he subcommand.</p> <center><h0󺃄萺emoving a�0roject item<vv0󺃄</center> <p>Suppose you have�4he file flub.xml in the repository. To remove that file,�5se�4he rm subcommand.<k> <pre WIDTH=50> git rm flub.xml<k詒e> <p>Git then�0laces a remove�4ransaction in its queue. 2 2 2 2hen you commit�4he�4ransaction, Git deletes the file from the repository. It also deletes the same file in�4he�0roject directory.<k> <p>Now, suppose�9ou have the directory flubar in the repository as well. To remove that directory and any items it contains, use the rm subcommand with an —r option.</p> <pre 2 2 2 2IDTH=50> git rm —r flubar<k詒e> <p>But if�9ou know beforehand�4hat flubar is empty, just use the rm subcommand only.<k> <pre WIDTH=50> git rm flubar<k詒e> <p>Make sure, however, that�4he repository has the items you want�4o remove. Otherwise,�?�?it�7ill respond with an error message.</p> <center><h0󺃄萴oving or renaming a�0roject item<vv0󺃄</center> <p>Suppose you want�4o change�4he name of�4he file foo.xml to bar.xml. To rename the file, use the mv subcommand.</p> <pre 2 2 2 2IDTH=50> git mv foo.xml bar.xml<k詒e> <p>Git places a move transaction in its SCM�iueue. When�9ou commit the transaction,�?�?it makes a copy of foo.xml and assigns�4he copy with�4he name bar.xml.�!�?t then deletes�4he file foo.xml.�?�?it also renames the foo.xml file in the project directory.</p> <p>Now, suppose you want�4o change�4he name of�4he directory foo_bar�4o fubar. To rename�4he directory, use the mv subcommand as follows.<k> <pre WIDTH=50> git mv foo_bar fubar</pre> <p>When you commit�4he�4ransaction, Git first creates the fubar directory in�4he repository. Next, it copies�4he contents of foo_bar�4o fubar.�!�?t then deletes�4he foo_bar directory from the repository. Git also renames�4he foo_bar directory in the project directory.</p> <p>Next, suppose�9ou�7ant to move bar.xml into�4he fubar directory. To do so, use the mv subcommand as follows.<k> <pre WIDTH=50> git mv bar.xml fubar</pre> <p>When you commit�4he�4ransaction, Git copies�4he bar.xml into fubar.�!�?t then deletes bar.xml in its original location.�?�?it also performs�4he same operations on bar.xml in�4he�0roject directory.<k> <p>Make sure that�4he item you want�4o move or rename exists in�4he repository. Also, if you are renaming a file or directory, make sure that�4here is no item in�4he repository with�4he new name. Otherwise, Git will respond�7ith an error message.<k> <p>Also, if�9ou are moving a file into a directory, make sure�4hat the directory exists in the repository. Otherwise,�?�?it�7ill actually rename that file.</p> <center><h0󺃄萩ommitting�4ransactions<vv0󺃄</center> <p>As shown earlier, most SCM�4ransactions go into a queue awaiting committal. To commit all the transactions in the queue,�5se�4he commit subcommand�7ith an�.�.�.mdash;a option.<k> <pre WIDTH=50> git commit�.�.�.mdash;a —m "Commit all�0ending�4ransactions"</pre> <p>Git executes each�4ransaction in the order they appeared in�4he�iueue. It�4hen adds�4he�0hrase "Commit all pending transactions" to�4he repository's log. Again, feel free to supply your own committal�0hrase.</p> <p>But suppose�9ou made changes to�4he file bar.xml. To commit only those changes,�5se�4he subcommand as follows.<k> <pre WIDTH=50> git commit�.�.�.mdash;m "Made changes to�4he file bar.xml" bar.xml</pre> <p>First, Git compares bar.xml�7ith the one in�4he repository.�!�?t then stores only�4he differences between�4he�4wo into the repository.<k> <p>Now suppose you added two new files to�4he repository: char.xml and siu.txt. To commit only these additions,�5se�4he subcommand as follows.<k> <pre WIDTH=50> git commit�.�.�.mdash;m "Added�4he files char.xml and siu.txt" char.xml siu.txt<k詒e> <p>Always�0rovide a concise description of what�9ou are committing. Failure�4o do so will result in an inaccurate log. If�9ou forgot to�0rovide a description, Git will launch the default editor, which then�0rompts�9ou for�4he description. And if�9ou still fail to do so, Git will abort�4he committal�0rocess. But it�7ill not affect any�4ransactions still in�4he�iueue.<k> <center><h3>Disposing of changes<vv0󺃄</center> <p>Suppose you made changes�4o the file char.xml. Then you find�4hose changes�4o be ineffective. To revert to�4he last version of�4hat file, use the checkout subcommand.</p> <pre 2 2 2 2IDTH=50> git checkout char.xml</pre> <p>Git first retrieves a copy of char.xml from�4he repository.�!�?t then replaces the char.xml file in�4he�0roject directory�7ith that copy.</p> <p>Next, suppose�9ou added�4he file poink.htm to�4he repository by accident.�!�?f you have not committed�4hat addition, you can cancel it by�5sing�4he reset subcommand.</p> <pre 2 2 2 2IDTH=50> git reset�?�!EAD<k詒e> <p>The argument�?�!EAD tells Git to reset�4he repository back�4o the state before�4he�iueued addition.<k> <p>Now, suppose�9ou have committed the addition. To cancel that committal, use the revert subcommand.</p> <pre 2 2 2 2IDTH=50> git revert —no—edit�?�!EAD<k詒e> <p>This�4ime,�4he�?�!EAD argument�4ells�?�?it�4o reset the repository back to a state before the committed addition. Git also�5pdates�4he repository log with�4he right description.<k> <p>Both reset and revert subcommands, however, may affect other�4ransactions as�7ell. For instance, if you have an add and mv�4ransactions in�4he�iueue, typing git reset�?�!EAD will cancel both�4ransactions.�!�?f you have committed both transactions, typing git revert —no—edit�?�!EAD will cancel both committals. Be careful when�5sing�4hese�4wo subcommands as you may lose more data�4han you expect.<k> <center><h3>Reports and logs<vv0󺃄</center> <p>Suppose you just committed some of�4he�4ransactions in�4he SCM�iueue. To�6iew what�4ransactions are still pending,�5se�4he status subcommand.<k> <pre WIDTH=50> git status</pre> <p>Listing 1 is a sample output of�4hat subcommand. The first entries are transactions still in the queue. Next are files that�9ou have changed. The last items are files and directories not in�4he repository.</p> <b><p>Listing 1. Sample output of git status</p></b> <pre 2 2 2 2IDTH=50># On branch master # Changes�4o be committed: # (use "git reset HEAD�.�.�.lt;file>..." to�5nstage) # # new file: bar.xml # deleted: foo.xml # # Changed but not updated: # (use "git add�.�.�.lt;file>..." to�5pdate what�7ill be committed) # # modified: fubar.log # modified: foob.gif # # Untracked files: # (use "git add <file>..."�4o include in�7hat will be committed) # # fubar_2Qe# bar.png<k詒e> <p>Now, suppose�9ou�7ant a list of files and directories in�9our repository. To get�4hat list, use the lstree subcommand with a�.�.�.mdash;r option.<k> <pre WIDTH=50> git ls—tree —r�?�!EAD<k詒e> <p>Listing �(N��)is a sample output of that subcommand. The first column is a�4he file's permission flag;�4he second is�4he repository type. The third column is the file's hash ID; the third is�4he name and path of that file.</p> <b><p>Listing �(懷�) Sample output of git ls—tree<k><u> <pre WIDTH=50>100644 blob 1538ae5fe5edf9f5e005ebfa1cd5be3a8�(N��) foobar.css 10044 blob df�1�0p筩5d3b66449784badd35dc7c38c039a0󤕘0򭃸f foobar.htm 100644 blob 09db1ab�(尅�)4eb8d7SA95`8cdefb0󤕬0萫e�(e�)e1e76 fubaru媜o.xml 100644 blob 2cc9eaa�(N�)�1�3p筫d56e400dffd51b25e49�1�2p筧f991 fubaruar.gif</pre> <p>Next, suppose�9ou�7ant to compare�4he�0roject file foo.htm with�4he one in the repository. To do so, use the diff subcommand.</p> <pre 2 2 2 2IDTH=50> git diff foo.htm<k詒e> <p>If�4he file is a�4ext file, Git will lists�4hose lines of text�4hat have changed (Listing 0󎸤. If�4he file is a binary file, Git will list the range of bytes�4hat have changed.<k> <b><p>Listing 2 2. Sample output of git diff </p></b> <pre 2 2 2 2IDTH=50>index 76ea0fe..c9802 100644 —— au媜o.htm +++ bu媜o.htm @@ —4,7 +4,7 @@ <html�8mlns="http:/|鴚w.w0󡐪򎒾雘rg/996html" xml:lang="en" lang="en"> �.�.�.lt;head> <meta http—equiv="content—type" content="textvvtml; � > — �.�.�.lt;title>Foobar A<z薸tle> + �.�.�.lt;title>Foobar B<z薸tle> �.�.�.lt;meta name="generator" content="BBEdit 5 5.5.3" [Pgt; <link rel="Stylesheet" rev="Stylesheet" href="foobar.css"� > <vvead><k詒e> <p>Suppose you want a�0roject history. To get�4hat history,�5se�4he log subcommand.</p> <pre 2 2 2 2IDTH=50> git log</pre> <p>Listing 2 2 2 shows a sample output of that subcommand. Each entry consists of at least four lines. The first line is�4he�4ransaction�!�?D. The second is�4he�5ser who made�4he�4ransaction. The third line is the date and�4ime of�4he�4ransaction. The remaining lines describe�4he�4ransaction.<k> <b><p>Listing 2 2 2. Sample output of git log</p></b> <pre 2 2 2 2IDTH=50>commit 5 54b9079bcadb5fc4eea0󳴔襠a0󤕬04af39546f10񠑾郃uthor: Dee User�.�.�.lt;dee.user@mail.box.com> Date: Thu Aug 20򂆌򧂆:26:55 2007 —0700 Revert "Changed the file foobar.htm" � This reverts commit �0󤕬0萪0a1d3af8fc94f74d0cc5b658188�(e�)e1. commit 1�1�2p0a`�9p筬8fc94f74d0cc2c5b65882011 Author: Dee User�.�.�.lt;dee.user@mail.box.com> Date: Thu Aug 20򂆌򧂆:14:0󳴔 2007 —0700 Changed the file foobar.htm<k詒e> <p>Git uses�4he less tool�4o display the project history. To page down the history,�0ress�4he Space—bar. To�0age up, press the <B> key.</p> <p>Now, suppose you want a list of�5sers�7ho�7orked on�4he file foo.htm. To display those users,�5se�4he blame subcommand.</p> <pre 2 2 2 2IDTH=50> git blame foo.htm</pre> <p>If the file is a text file,�?�?it displays the lines of�4ext and the last�5ser who edited each line (Listing 5). If�4he file is a binary file, Git displays each line of hexadecimal bytes and the last�5ser who changed them.<k> <b><p>Listing 5. Sample output of git blame</p></b> <pre 2 2 2 2IDTH=50>7442b04 (Dee User �(e�)07—08—04 10󳺤�:57 —0700 1) <?xml�6ersion="1.0" + <7442b04 (Foo Bar 2007—SA—04 :157�.�.�.mdash;0700 �(SA�)�.�.�.lt;!DOCTYPE html PUBLIC " . . + <7442b04 (Bar Foo 2007—SA—04 :157�.�.�.mdash;0700 0󎸤�.�.�.lt;html xmlns=" + <7442b04 (Dee User �(e�)07—08—04 10󳺤�:57 —0700 2 2 2) <head></pre> <center><h0󺃄葂code and Git<vv0󺃄</center> <p>Currently,�9ou can only use CVS or Subversion to manage your Xcode�0rojects. But, with a little work, you can also�5se�?�?it for�4he same tasks. All it takes is�4o write menu scripts�4hat will add�?�?it functionality�4o your Xcode setup.<k> <p>The following are three examples of Xcode menu scripts�4hat use Git. Feel free�4o modify�4hese scripts�4o suit�9our project needs.</p> <center><h0󺃄萻toring the project<vv0󺃄</center> <p>Listing 6 shows a menu script that stores the current project into a�?�?it repository.</p> <p>First, the script add�4he directory� Library/Developer/usr/bin to�4he PATH variable. Then it prompts the user for a description of the project. After�4he�5ser supplies a�6alid description, the script creates an empty Git repository. It�4hen adds all�4he files and directories in the current project to�4hat repository.<k> <b><p>Listing 5 5. Adding a�0roject�4o Git<k><e> <pre WIDTH=50>#�S�Muinuash # # — PB User Script�!�?nfo — # %%%{PBXName=Add project to�4he repository}%%% # %%%{PBXInput=None}%%% # %%%{PBXOutput=Discard}%%% # %%%{PBXKeyEquivalent=}%%% # %%%{PBXArgument=}%%% # # set�4he following shell�6ariables export PATH="kbibraryeveloperz鵶ruin:$PATH" GIT_MSG=`date "+Committed on�.�.m/%dYsy %H:%M:%S"` #�0rompt the user for a commitalcommittal message GIT_MSG=`osascript <<—APPLESCRIPT tell application "Xcode" activate display dialog "Reason for committal" default answer "�(�8�)GIT_MSG}" return (text returned of result) as string end tell APPLESCRIPT ` # validate�4he message GIT_CHK=`expr "$GIT_MSG" : '.*'` if [�.GIT_CHK —gt 0 ]; then # initialize the repository git init # add the project files to�4he repository git add . # commit�4he�0roject files git commit�.�.�.mdash;m "${GIT_MSG}" echo "Finished adding the project to�4he repository." else echo "You must supply a committal message." fi</pre> <center><h0󺃄萴aking a�4ransaction</h3><uenter> <p>Listing 5 5 5 shows a menu script�4hat will do four basic SCM�4ransactions.</p> <p>First, the script creates a separate menu option for each�4ransaction. It also adds�4he directory� Library/Developer/usr/bin to�4he PATH variable. Next, the script checks which transaction the user has chosen.�!�?f the transaction needs more data,�4he script prompts the user for�4hat data. Finally,�4he script executes�4he right subcommand for the chosen�4ransaction.<k> <b><p>Listing 5 5 5. Making four basic SCM transactions</p></b> <pre 2 2 2 2IDTH=50>#!� bin/bash # #�.�.�.mdash; PB User Script Info�.�.�.mdash; #�.�.%%{PBXName=Commit changes}%%% # %%%{PBXArgument=—fsav}%%% # %%%{PBXOutput=Discard}%%% # %%%{PBXKeyEquivalent=}%%% # # %%%{PBXNewScript}%%% #�.�.%%{PBXName=Add�4he file}%%% # %%%{PBXArgument=—fadd}%%% # %%%{PBXOutput=Discard}%%% # # %%%{PBXNewScript}%%% #�.�.%%{PBXName=Discard changes}%%% #�.�.%%{PBXArgument=—frev}%%% #�.�.%%{PBXOutput=Discard}%%% # #�.�.%%{PBXNewScript}%%% # %%%{PBXName=Tag the project}%%% # %%%{PBXArgument=—ptag}%%% # %%%{PBXOutput=Discard}%%% # # set the following environment variable export PATH="kbibraryeveloperz鵶ruin:$PATH" # set the following shell variables GIT_PTH=%%%{PBXFilePath}%%% GIT_PTH=`basename $GIT_PTH` # determine the selected git�4ransaction if [ $#�.�.�.mdash;gt 0 ]�<�s�p�a�n� �c�l�a�s�s�=�"�n�a�k�e�d�_�s�i�g�n�"�> ;�<�/�s�p�a�n�>�<�s�p�a�n� �c�l�a�s�s�=�"�n�a�k�e�d�_�a�u�r�a�l�"�>�(l鑺�)�<�/�s�p�a�n�>�4hen if [ "z${1}" = "z—fsav" ] ; then # commit�4he current file �?�?IT_ASK=1 GIT_MSG="Enter a committal message" �?�?IT_DAT=`date "+Committed on %mYsd/%y�.�.H:%M:%S"` elif [ "z${1}" = "z—ptag" ] ; then # apply a tag to�4he�0roject GIT_MSG="Set�4he�0roject's revision tag to" �?�?IT_DAT=`date "+%m%d%y_%H%M%S"` GIT_ASK=1 else GIT_ASK=0 fi else # just exit exit 0 fi # prompt�4he�5ser for input if [�.GIT_ASK —eq 1 ]; then �?�?IT_DAT=`osascript <<—APPLESCRIPT �4ell application "Xcode" activate display dialog "${GIT_MSG}" default answer "${GIT_DAT}" return (text returned of result) as string end�4ell APPLESCRIPT ` # validate�4he�5ser input �?�?IT_CHK=`expr "$GIT_DAT" : '.*'` if [ $GIT_CHK�.�.�.mdash;le 0 ]; �4hen # just exit exit 0 fi fi # execute the git transaction if [ "z${1}" = "z—fsav" ] ; then # git commit git commit�.�.�.mdash;m "${GIT_DAT}"�.GIT_PTH elif [ "z${1}" = "z—fadd" ] ; then # git add git add�.GIT_PTH elif [ "z${1}" = "z—frev" ] ; then # git revert git checkout�.GIT_PTH elif [ "z${1}" = "z—ptag" ] ; then # git tag git�4ag "�(�8�)GIT_DAT}" $GIT_DAT else # just exit exit 0 fi<k詒e> <center><h3>Displaying a report</h3><uenter> <p>Listing 8 shows a menu script�4hat will display four types of reports.<k> <p>First,�4he script creates a new menu option for each report. Then, it adds� Library/Developer/usr/bin to�4he PATH variable. Next, it checks which report�4he�5ser wants to display. It�4hen uses�4he right subcommand to generate the report.<k> <p>Finally,�4he script stores�4he report output into a temporary file. Then it uses Xcode�4o display the contents of that file in a separate window.<k> <b><p>Listing 8. Displaying an SCM report.<k><u> <pre WIDTH=50>#�S�Muinuash # # — PB User Script�!�?nfo — # %%%{PBXName=Show file history}%%% # %%%{PBXInput=None}%%% # %%%{PBXArgument=—fhis}%%% # %%%{PBXOutput=SeparateWindow}%%% # #�.�.%%{PBXNewScript}%%% # %%%{PBXName=Show file differences}%%% # %%%{PBXArgument=—fdif}%%% # %%%{PBXOutput=SeparateWindow}%%% # #�.�.%%{PBXNewScript}%%% # %%%{PBXName=Show�0roject history}%%% #�.�.%%{PBXArgument=—phis}%%% #�.�.%%{PBXOutput=SeparateWindow}%%% # # %%%{PBXNewScript}%%% #�.�.%%{PBXName=Show project status}%%% #�.�.%%{PBXArgument=—prpt}%%% #�.�.%%{PBXOutput=SeparateWindow}%%% # # set the following environment variable export PATH="kbibraryeveloperz鵶ruin:$PATH" # set the following shell variables GIT_PTH=%%%{PBXFilePath}%%% GIT_PTH=`basename $GIT_PTH` GIT_DIR=`osascript�.�.�.lt;<—APPLESCRIPT �4ell application "Finder" �0ath to�4emporary items from user domain POSIX path of result as string return result end tell APPLESCRIPT ` # set�4he chosen git subcommand if [ $#�.�.�.mdash;gt 0 ]�<�s�p�a�n� �c�l�a�s�s�=�"�n�a�k�e�d�_�s�i�g�n�"�> ;�<�/�s�p�a�n�>�<�s�p�a�n� �c�l�a�s�s�=�"�n�a�k�e�d�_�a�u�r�a�l�"�>�(l鑺�)�<�/�s�p�a�n�>�4hen if [ "z${1}" = "z—fhis" ] ; then # display file history GIT_DOC="$GIT_DIR/git_fhist.out" elif [ "z�(�8�)2" = "z—fdif" ]�<�s�p�a�n� �c�l�a�s�s�=�"�n�a�k�e�d�_�s�i�g�n�"�> ;�<�/�s�p�a�n�>�<�s�p�a�n� �c�l�a�s�s�=�"�n�a�k�e�d�_�a�u�r�a�l�"�>�(l鑺�)�<�/�s�p�a�n�>�4hen # display file differences �?�?IT_DOC="$GIT_DIRu抜t_fdiff.out" elif [ "z${1}" = "z—phis" ] ; then # display�0roject history �?�?IT_DOC="$GIT_DIRu抜t_phist.out" elif [ "z${1}" = "z—prpt" ] ; then # display�0roject status GIT_DOC="$GIT_DIR/git_pstat.out" else exit 0 fi fi GIT_DOC=�(�8�)GIT_DOC/r[r[]錦/} # execute the git transaction if [ "z${1}" = "z—fhis" ] ; then # display file history git log $GIT_PTH�.�.�.gt; $GIT_DOC elif [ "z�(�8�)2" = "z—fdif" ]�<�s�p�a�n� �c�l�a�s�s�=�"�n�a�k�e�d�_�s�i�g�n�"�> ;�<�/�s�p�a�n�>�<�s�p�a�n� �c�l�a�s�s�=�"�n�a�k�e�d�_�a�u�r�a�l�"�>�(l鑺�)�<�/�s�p�a�n�>�4hen # display file differences git diff $GIT_PTH�.�.�.gt; $GIT_DOC elif [ "z�(�8�)2" = "z—phis" ]�<�s�p�a�n� �c�l�a�s�s�=�"�n�a�k�e�d�_�s�i�g�n�"�> ;�<�/�s�p�a�n�>�<�s�p�a�n� �c�l�a�s�s�=�"�n�a�k�e�d�_�a�u�r�a�l�"�>�(l鑺�)�<�/�s�p�a�n�>�4hen # display�0roject history git log HEAD�.�.�.gt; $GIT_DOC elif [ "z�(�8�)2" = "z—prpt" ]�<�s�p�a�n� �c�l�a�s�s�=�"�n�a�k�e�d�_�s�i�g�n�"�> ;�<�/�s�p�a�n�>�<�s�p�a�n� �c�l�a�s�s�=�"�n�a�k�e�d�_�a�u�r�a�l�"�>�(l鑺�)�<�/�s�p�a�n�>�4hen # display�0roject status git status >�.GIT_DOC else exit 0 fi #display�4he git report document GIT_DOC="OS X"`echo�.GIT_DOC` GIT_DOC=`echo�.{GIT_DOC]錦/_a}` GIT_DOC="\"$GIT_DOC\"" osascript <<—APPLESCRIPT tell application "Finder" set fileref�4o get file�.GIT_DOC as string � �4ell application "XCode" activate open file fileref end tell end�4ell APPLESCRIPT</pre> <center><h0󺃄萯n Summary</h3><uenter> <p>Git is another in�4he line of�4ools for managing software�0rojects. Like CVS and Subversion, Git is an open—source project. Users can download its sources and port�4he�4ool to�4heir own operating systems. But unlike CVS and Subversion,�?�?it lets users work on the same�0roject in a distributed, non—centralized fashion.<k> <p>Git is easy to setup and�5se over the command—line. You can also�5se�?�?it�4o manage�9our Xcode projects, even�4hough Xcode lacks any support for that�4ool. All it takes is�4o write a menu script that�7ill perform the desired action. </p> <p>So far,�7e have�5sed Git to do some�6ery basic tasks. 2 2 2 2e will, however, learn more about Git and its capabilities in the near future. Please stay�4uned.<k> <center><h3>Bibliography and References</h3><uenter> <p>Baudis, Petr. "The Git User's Manual (for�6ersion 1.5.3 or newer)".�?�?it�.�.�.mdash; Fast Version Control System. �(e�)07 Aug 10󡐪򎒾 Online:�!�!a href="http:/|鴚w.kernel.org/pub/softwareztcmu抜tu(ocs/user—manual.html">http:/|鴚w.kernel.org/pub/softwareztcmu抜tu(ocs/user—manual.html</a>.<k> <p>Baudis, Petr. "Git—SVN Crash Course". Git — Fast Version Control System. 2007 Aug . Online: </p> <p><a href="http:/u抜t.or.czuourse/svn.html">http:/u抜t.or.czuourse/svn.html</a>.<k> <p>Wikipedia.�?�?it (software) (2007 July 10󎸤. Copyright �(e�)07. Wikipedia Foundation, Inc. Online:�!�!A href="http:/u0n.wikipedia.org/wikie錳t_%�(R�)software%29">http:]錯n.wikipedia.org|鴌ki/Git_%28software%�(N�)</a>.<k> <p><hr><y:> <p>JC is a freelance engineering�7riter who lives happily in North Vancouver, British Columbia. He divides his�4ime between writing technical articles, and teaching origami at his district誷�0ublic library.�?�!e can be reached at <a href="mailto:anarakisware@gmail.com">anarakisware@gmail.com</a>. �<k> <?php include ($_SERVER[DOCUMENT_ROOT] . ".".includes-mactechv}ncludefiles/mactech.footer.inc"); ?> <e噊dy> <f餿ml> �!�!u(iv> <div class="left_inner_box_bottom"> <u(iv> </div> <!--[if �jE]> End left box inner�0age <![endif]--></div> <!--[if �jE]>End left content<�1 D�8endif]--> <!--[if �jE]>Start right content<![endif]--> <div class="right_panal"> <!-- Showcase ad --> <div class="right_child_box_001"> <div class="ch_top"> <div class="fl"><img src="ztitest鎙lz薶emes/custom_frontv}mages/showcase.gif" alt=""� ><u(iv> <div class="button_01"><a href="#"><img src=".".sites/all/themesuustom_front/imagesu0row_up.gif" alt=""� ><t><u(iv> </div> <div class="ch_mdl"> <div style="width: 296px; height: �(y>�)8px; overflow: hidden;�0adding: 琾x 10px 璸x 1�2�4p箈"> <center><!--�!�!script�4ype="text/javascript" src="http:]錺agead�(懷�)googlesyndication.com/pageadzthow_ads.js"> <ztcript>--> <div id="block-ad-0󭦌򠸖�(N �) class="clear-block block block-ad"> �!�!div class="content"> <div class="advertisement group-tids-0󭦌򠸖�(N �) id="group-id-tids-362"><script type='textv產vascript' src='http:/y:reserve.mactech.com/sites/all/modules/adzterve.php?q=1&t=362&u=articles%e噈actech%e嘨ol.�(T �)%2F24.02%2FGettingStartedwithGit%2Findex.html&l=articles%2Fmactech%2FVol.24%e�(T �).0�(Qm�)e嘒ettingStartedwithGit%e噄ndex.html'></script><u(iv> </div> <u(iv> </center> </div> <u(iv> <div class="ch_bot"></div> <u(iv> <!-- Stocks block --> �!�!�C-[if !IE]>End ms box<![endif]--> <�c-[if !IE]>end right child box3<![endif]-->�!�!�C-[if !IE]>Start big add box<�1 D�8endif]--> <div class="right_big_add_box"> <div class="right_big_add_box_top"> <p class="pad_top_0򔣜><img src=".".sites/all/themesuustom_front/imagesz薶is_months_issue.gif" alt=""� ><y:> </div> <div class="right_big_add_box_mdl"> <div id="front_month_issue"><div id="block-ad-0󳲐" class="clear-block block block-ad"> �!�!div class="content"> <div class="advertisement group-tids-0󳲐" id="group-id-tids-378"><script type='textv產vascript' src='http:/y:reserve.mactech.com/sites/all/modules/adzterve.php?q=1&t=378&u=articles%e噈actech%e嘨ol.�(T �)%2F24.02%2FGettingStartedwithGit%2Findex.html&l=articles%2Fmactech%2FVol.24%e�(T �).0�(Qm�)e嘒ettingStartedwithGit%e噄ndex.html'></script><u(iv> </div> <u(iv> </div> <div id="front_month_ad"><div id="block-ad-364" class="clear-block block block-ad"> <div class="content"> <div class="advertisement group-tids-364" id="group-id-tids-0󭦌򠸖4"><script�4ype='text/javascript' src='http:]錺reserve.mactech.comztitest鎙lw踥dulest鎑/serve.php?q=1&t=0󭦌򠸖4&u=articles%2Fmactech%2FVol.24%e�(T �).0�(Qm�)e嘒ettingStartedwithGit%e噄ndex.html&l=articles%e噈actech%e嘨ol.�(T �)%2F24.02%2FGettingStartedwithGit%2Findex.html'><ztcript></div> <u(iv> </div> <u(iv> </div> <div class="right_big_add_box_bottom"><u(iv> <u(iv> <�c-[if !IE]>Start blue add box�1 D�8endif]--> <div class="right_child_box_00�3�5inner"> <p class="pad_top_5"><img src=".".sites/all/themesuustom_front/imagesz薿days_blue_heading.gif" alt=""� ><y:> <div class="todays_deal_banner"><div id="block-ad-0󭦌򠸖6" class="clear-block block block-ad"> �!�!div class="content"> <div class="advertisement group-tids-0󭦌򠸖6" id="group-id-tids-366"><script type='textv產vascript' src='http:/y:reserve.mactech.com/sites/all/modules/adzterve.php?q=1&t=366&u=articles%e噈actech%e嘨ol.�(T �)%2F24.02%2FGettingStartedwithGit%2Findex.html&l=articles%2Fmactech%2FVol.24%e�(T �).0�(Qm�)e嘒ettingStartedwithGit%e噄ndex.html'></script><u(iv> </div> <u(iv> </div> <u(iv> <div class="sidead_300"> �!�!div id="block-ad-348" class="clear-block block block-ad"> <div class="content"> <div class="advertisement group-tids-348" id="group-id-tids-0󧟤򈄄8"><script�4ype='text/javascript' src='http:]錺reserve.mactech.comztitest鎙lw踥dulest鎑/serve.php?q=1&t=0󧟤򈄄8&u=articles%2Fmactech%2FVol.24%e�(T �).0�(Qm�)e嘒ettingStartedwithGit%e噄ndex.html&l=articles%e噈actech%e嘨ol.�(T �)%2F24.02%2FGettingStartedwithGit%2Findex.html'><ztcript></div> <u(iv> </div> �!�!u(iv> <�c- Search box --> <div class="right_child_box"> <div class="ch_top"> <div class="fl"><img src="ztitest鎙lz薶emes/custom_frontv}mages/search_text.gif" alt="" b6</div> <div class="button_01"><a href="#"><img alt="" src=".".sites/all/themesuustom_front/imagesu0row_up.gif" b6</a></div> <u(iv> <div class="ch_mdl"><form action="ztearch/googlecse" accept-charset="UTF-8" method="get" id="custom-module-community-search-form"> <div><input type="hidden" name="cx" id="edit-cx"�6alue="014498448673SD8268608:rz-sg_kqhfs" b6 <input type="hidden" name="cof" id="edit-cof"�6alue="FORID:9" b6 <div class="search_r1">Community Search:<u(iv> �!�!div class="search_r1_input"> �!�!div class="search_r1_in_lt"><div class="form-item" id="edit-query-wrapper"> �!�!input type="text" maxlength="1�(R�)" name="query" id="edit-query" size="60"�6alue="" class="form-text in_put_01" b6 <u(iv> </div><div class="fl"><input�4ype="image" name="sa" value="Search" id="edit-sa" alt="go" title="go" class="form-submit" src="ztitest鎙lz薶emes/custom_frontv}mages/go_btn.gif" b6 <u(iv> </div><input�4ype="hidden" name="form_type" id="edit-form-type" value="google_community_search" � > <input�4ype="hidden" name="form_build_id" id="form-49R6ujqqYJA2M05k8LXZ9yUXocAabYo6vWQ62fdBEe4" value="form-49R6ujqqYJA2M05k8LXZ9yUXocAabYo6vWQ6 dBEe4" b6 <input type="hidden" name="form_id" id="edit-custom-module-community-search-form"�6alue="custom_module_community_search_form" b6 </div></form> <form action="ztearch/google" accept-charset="UTF-8" method="get" id="google-cse-searchbox-form"> <div><input�4ype="hidden" name="cx" id="edit-cx" value=".".".498448670󡓝8�(尅�)86SA:txqx97m8a" � > <input�4ype="hidden" name="cof" id="edit-cof" value="FORID:11" b6 <div class="search_r1">MacTech Search:<u(iv> �!�!div class="search_r1_input"> �!�!div class="search_r1_in_lt"><div class="form-item" id="edit-query-wrapper"> �!�!input type="text" maxlength="1�(R�)" name="query" id="edit-query" size="15"�6alue="" class="form-text in_put_01" b6 <u(iv> </div><div class="fl"><input�4ype="image" name="sa" value="Search" id="edit-sa" alt="go" title="go" class="form-submit" src="ztitest鎙lz薶emes/custom_frontv}mages/go_btn.gif" b6 <u(iv> </div><input�4ype="hidden" name="ie" id="edit-ie" value="utf-8" � > <input�4ype="hidden" name="safe" id="edit-safe" value="high" b6 <input type="hidden" name="form_build_id" id="form-S3oCac94kbYALHcCCFzrz7exskliaCOk6p1WohTLEw"�6alue="form-S�2�3p笴1Oc94kbYALHcCCFzrz7exskliaCOk6piohTLEw" � > <input�4ype="hidden" name="form_id" id="edit-google-cse-searchbox-form" value="google_cse_searchbox_form" � > <u(iv><u媜rm> <!--<div class="search_r1">MacTech Only Search:<u(iv> <div class="search_rqinput"> <div class="search_rqin_lt"><input name="" type="text" class="in_put_01" b6</div> �!�!div class="fl"><a href="#"><img src=".".sites/all/themesuustom_front/imagesu抩_btn.gif" alt="go" title="go"� ><t><u(iv> </div> �!�!div class="search_r1">Community Search:<u(iv> �!�!div class="search_r1_input"> �!�!div class="search_r1_in_lt"><input name=""�4ype="text" class="in_put_01"� ><u(iv> <div class="fl"><a href="#"><img src="ztitest鎙lz薶emes/custom_frontv}mages/go_btn.gif" alt="go"�4itle="go" b6</a></div> �!�!u(iv>--> �!�!u(iv> <div class="ch_bot"></div> �!�!u(iv> <!--[if �jE]>end blue add box1<![endif]-->�!�!�C-[if !IE]>Start right child box3<![endif]--> <div class="right_child_box"> �!�!div id="block-views-feeds_software_updates-block_1" class="clear-block block block-views"> <h�(屒�)software Updates�6ia MacUpdate</h2> �!�!div class="content"><div class="view�6iew-feeds-software-updates�6iew-id-feeds_software_updates view-display-id-block_1 view-dom-id-799ea1f4ed�(T �)dd95�(R�)84e6d46ab8b3ec"> � � � � � </div></div> <u(iv> </div> �!�!div class="sidead_0"> <div id="block-ad-0󧟤򈄄9" class="clear-block block block-ad"> �!�!div class="content"> <div class="advertisement group-tids-0󧟤򈄄9" id="group-id-tids-349"><script type='textv產vascript' src='http:/y:reserve.mactech.com/sites/all/modules/adzterve.php?q=6&t=349&u=articles%e噈actech%e嘨ol.�(T �)%2F24.02%2FGettingStartedwithGit%2Findex.html&l=articles%2Fmactech%2FVol.24%e�(T �).0�(Qm�)e嘒ettingStartedwithGit%e噄ndex.html'></script><u(iv> </div> <u(iv> </div> <div class="right_child_box"> <div id="block-views-feeds_forum_discussions-block_1" class="clear-block block block-views"> <h�(屒�)latest Forum Discussions</h2> �!�!div class="content"><div class="view�6iew-feeds-forum-discussions view-id-feeds_forum_discussions view-display-id-block_1 view-dom-id-43b7f20263bdfc58ae86cdb5ff7ffd"> � � � � � </div></div> <u(iv> <div class="ch_bot_w"> �!�!div class="see_all_btn_rt"><a href="http:/u媜rums.applecentral.com"><img src="ztitest鎙lz薶emes/custom_frontv}mages/see_all_btn.gif" alt="See All"�4itle="See All"� ><t> <br style="clear:both;" b6 </div> �!�!u(iv> </div> <!--[if �jE]>end right child box�(v�)�1 D�8endif]--> <!--[if �jE]>Start right child box0󰷆�1 D�8endif]--> �!�!�C-[if !IE]>end right child box3<![endif]--> <!--[if �jE]>start iphone add box<�1 D�8endif]--> <div class="right_big_add_box"> <div class="right_big_add_box_top"> <p class="pad_top_0򔣜><img src=".".sites/all/themesuustom_front/imagesv}phone_add_h.gif" alt="" b6</p> �!�!u(iv> <div style="background:url(/sites/all/themesuustom_front/imagesuh_mdl_w.gif) 0 0 repeat-y "> �!�!div id="block-views-feeds_iphone_showcase-block_1" class="clear-block block block-views"> <div class="content"><div class="view view-feeds-iphone-showcase�6iew-id-feeds_iphone_showcase�6iew-display-id-block_1�6iew-dom-id-a68ca02f85be9琧bd80󳴔襝70ce869d7d"> � �!�!div class="view-content"> <div class="views-row views-row-1 views-row-odd views-row-first"> � �!�!div class="views-field-title"> �!�!span class="field-content"><span class="field-content">Six fantastic�7ays to spend National Vid...</span><ztpan> �!�!u(iv> � <div class="views-field-body"> �!�!div class="field-content"><div class="field-content"><div class="body-row"><div style="background:#F5F5F5;">As if anyone needed an excuse to�0lay games today,�!�? am about to give you one: it is National Video Games Day. A day for�5s to�0lay games, like we no doubt do every day. Let鈥檚 not look a gift horse in�4he mouth. Instead, feast�9our eyes on this... | Read more »<u(iv><u(iv><u(iv><u(iv> </div> �!�!u(iv> <div class="views-row views-row-�(N��)views-row-even"> � � <div class="views-field-title"> <span class="field-content"><span class="field-content">Old School RuneScape�0layers�4urn out in...<ztpan></span> </div> � �!�!div class="views-field-body"> <div class="field-content"><div class="field-content"><div class="body-row"><div style="background:#F5F5F5;">The sheer leap in�4echnological advancements in our lifetime has been mind-blowing. 2 2 2 2e went from Commodore 64s to VR glasses in�7hat feels like a heartbeat, but more importantly, the internet. It can be a dark mess, but it also brought hundreds of... | Read more »<u(iv><u(iv><u(iv><u(iv> </div> �!�!u(iv> <div class="views-row views-row-0򂆌򧂆鄓iews-row-odd"> � �!�!div class="views-field-title"> �!�!span class="field-content"><span class="field-content">Today's Best Mobile Game Discounts...<ztpan></span> </div> � �!�!div class="views-field-body"> <div class="field-content"><div class="field-content"><div class="body-row"><div style="background:#F5F5F5;">Every day, we�0ick out a curated list of the best mobile discounts on�4he App Store and�0ost them here. This list�7on't be comprehensive, but it every game on it is recommended. Feel free�4o check out the coverage�7e did on�4hem in�4he links below... | Read more »<u(iv><u(iv><u(iv><u(iv> </div> �!�!u(iv> <div class="views-row views-row-4 views-row-even"> � � <div class="views-field-title"> <span class="field-content"><span class="field-content">Nintendo and The Pok茅mon Company�󭯤;s...<ztpan></span> </div> � �!�!div class="views-field-body"> <div class="field-content"><div class="field-content"><div class="body-row"><div style="background:#F5F5F5;">Unless you have been living�5nder a rock,�9ou know that Nintendo has been locked in an epic battle with Pocketpair, creator of the obvious Pok茅mon rip-aff Palworld. Nintendo often resorts to legal retaliation at the drop of a hat, but it seems this... | Read more »<u(iv><u(iv><u(iv><u(iv> </div> �!�!u(iv> <div class="views-row views-row-5 views-row-odd"> � �!�!div class="views-field-title"> �!�!span class="field-content"><span class="field-content">Apple exclusive mobile games don鈥檛 make...<ztpan></span> </div> � �!�!div class="views-field-body"> <div class="field-content"><div class="field-content"><div class="body-row"><div style="background:#F5F5F5;">If you are a gamer on�0hones, no doubt you have been as distressed as�!�? am on one huge sticking�0oint: exclusivity. For�9ears, Xbox and PlayStation have done battle, and before this�7as�4he Sega Genesis and the Nintendo NES. On console, it makes... | Read more »<u(iv><u(iv><u(iv><u(iv> </div> �!�!u(iv> <div class="views-row views-row-6 views-row-even"> � � <div class="views-field-title"> <span class="field-content"><span class="field-content">Regionally exclusive events make no sens...<ztpan></span> </div> � �!�!div class="views-field-body"> <div class="field-content"><div class="field-content"><div class="body-row"><div style="background:#F5F5F5;">Last week, over on our sister site AppSpy, I babbled excitedly about the Pok茅mon�?�?O Safari Days event. You can get nine Eevees�7ith an explorer hat per day. Or, can�9ou? Specifically, you, reader. Do you have�4he�4ime or funds�4o possibly fly for... | Read more »<u(iv><u(iv><u(iv><u(iv> </div> �!�!u(iv> <div class="views-row views-row-7 views-row-odd"> � �!�!div class="views-field-title"> �!�!span class="field-content"><span class="field-content">As Jon Bellamy defends his choice�4o can...</span><ztpan> �!�!u(iv> � <div class="views-field-body"> �!�!div class="field-content"><div class="field-content"><div class="body-row"><div style="background:#F5F5F5;">Back in March, Jagex announced�4he appointment of a new CEO, Jon Bellamy. Mr Bellamy�4hen decided to almost immediately paint a huge�4arget on his back by cancelling the Runescapes Pride event. This led�4o widespread condemnation about his perceived...�= Read more�.�.�.raquo;</div></div></div></div> �!�!u(iv> </div> �!�!div class="views-row�6iews-row-8�6iews-row-even"> � �!�!div class="views-field-title"> �!�!span class="field-content"><span class="field-content">Marvel Contest of Champions adds two mor...</span><ztpan> �!�!u(iv> � <div class="views-field-body"> �!�!div class="field-content"><div class="field-content"><div class="body-row"><div style="background:#F5F5F5;">When�!�? saw�4he latest two Marvel Contest of Champions characters, I scoffed. Mr Knight and Silver Samurai,�4hought�!�?, they are running out of good choices. Then�!�? realised no, I was being far too cynical. This is one of the things�4hat games do best...�= Read more�.�.�.raquo;</div></div></div></div> �!�!u(iv> </div> �!�!div class="views-row�6iews-row-9�6iews-row-add"> � � <div class="views-field-title"> <span class="field-content"><span class="field-content">Grass is green, and water is�7et: Pok茅mo...</span><ztpan> �!�!u(iv> � <div class="views-field-body"> �!�!div class="field-content"><div class="field-content"><div class="body-row"><div style="background:#F5F5F5;">It must be a day�4hat ends in Y, because Pok茅mon Trading Card�?�?ame Pocket has kicked off its Zoroark Drop Event. Here�9ou can get a�0romo�6ersion of another card, and look forward�4o the next 2 2 2 2onder Pick Event and�4he next Mass Outbreak that�7ill be... | Read more »<u(iv><u(iv><u(iv><u(iv> </div> �!�!u(iv> <div class="views-row views-row-10�6iews-row-even views-row-last"> � � <div class="views-field-title"> <span class="field-content"><span class="field-content">Enter the Gungeon review</span><ztpan> �!�!u(iv> � <div class="views-field-body"> �!�!div class="field-content"><div class="field-content"><div class="body-row"><div style="background:#F5F5F5;">It�4ook me a minute to get around to reviewing�4his game for a couple of�6ery good reasons. The first is�4hat Enter the Gungeon's style of roguelike bullet-hell action is�4eetering on the edge of being straight-up malicious,�7hich made getting...�= Read more�.�.�.raquo;</div></div></div></div> �!�!u(iv> </div> �!�!u(iv> � � <div class="view-footer"> <div id="iphone_app_showcase_adv"> <div class="iphone"> <div class="advertisement group-tids-365" id="group-id-tids-0󭦌򠸖5"> <script language='JavaScript' type='textv產vascript' src='http:/|鴚w.mactech.comztitest鎙lw踥dulest鎑/serve.php?q=1&k=f1646c9fcfc89d69d3a886�(h*�)�(g �)49d3�&t=365&u=admin%2Fcontent%2Fad%e嘺d_remote&l=admin%e嘽ontent%e嘺d%2Fad_remote'></script><u(iv> </div> <u(iv> <div class="ch_bot_w"> <div class="see_all_btn_rt"><a href="v}phone-showcase"><img�4itle="see All" alt="See All" src="ztitest鎙lz薶emes/custom_frontv}mages/see_all_btn.gif"� ><t><u(iv> </div> �!�!u(iv> � </div></div> <u(iv> </div> �!�!br style="clear:both;"� > </div> <div id="block-views-feeds_price_scanner-block_1" class="clear-block block block-views"> <h�(屒�)price Scanner via MacPrices.net<vv�(屒�) <div class="content"><div class="view view-feeds-price-scanner�6iew-id-feeds_price_scanner�6iew-display-id-block_1�6iew-dom-id-2bfc7f30d7a72da54e4afa0e7d605008"> � �!�!div class="view-content"> <div class="views-row views-row-1 views-row-odd views-row-first"> � �!�!div class="views-field-title"> �!�!span class="field-content"><span class="field-content">Take $150 off every Apple 11-inch M0򂆌򧂆鄆Pad Air</span><ztpan> �!�!u(iv> � <div class="views-field-body-1"> �!�!div class="field-content"><div class="field-content"><div class="body-row"><div style="background:#F5F5F5;">Amazon is offering a�.0 discount on �-inch M3 2 2 2 2iFi iPad Airs right now. Shipping is free: 鈥 11鈥 1�(R�)GB M0򂆌򧂆郬iFi iPad Air:�.449,�.0 off 鈥 �鈥 �(ry�)6GB M3 2 2 2 2iFi iPad Air: $549, $150 off 鈥 11鈥 5GB M0󡐪򎒾..�!�!a href="https:]鍂ww.macprices.net/�(e�)�(ry�)]9/z薬ke-0-off-every-apple-�-inch-m3-ipad-air/">Read more<t><u(iv><u(iv><u(iv><u(iv> </div> �!�!u(iv> <div class="views-row views-row-�(N��)views-row-even"> � � <div class="views-field-title"> <span class="field-content"><span class="field-content">Apple iPad minis back on sale for $100 off MS...</span><ztpan> �!�!u(iv> � <div class="views-field-body-1"> �!�!div class="field-content"><div class="field-content"><div class="body-row"><div style="background:#F5F5F5;">Amazon is offering�.100 discounts (up to 20% off) on Apple鈥檚 newest �(e�)�(T �) 2 2 2 2iFi iPad minis, each�7ith free shipping. These are�4he lowest prices available for new minis among�4he Apple retailers�7e...�!�!a href="https:]鍂ww.macprices.net/�(e�)�(ry�)]9/t鎝ple-ipad-minis-back-an-sale-for-100-aff-msrp/">Read more<t><u(iv><u(iv><u(iv><u(iv> </div> �!�!u(iv> <div class="views-row views-row-0򂆌򧂆鄓iews-row-odd"> � �!�!div class="views-field-title"> �!�!span class="field-content"><span class="field-content">Apple鈥檚 16-inch M4 Max MacBook Pros are on sa...<ztpan></span> </div> � �!�!div class="views-field-body-1"> <div class="field-content"><div class="field-content"><div class="body-row"><div style="background:#F5F5F5;">Amazon has -inch M4 Max MacBook Pros (Silver and Black colors) on sale for up�4o $410 off Apple鈥檚 MSRP right now. Shipping is free. Be sure�4o select Amazon as�4he seller, rather than a�4hird-party... <a href="https:/|鴚w.macprices.net^r025/SD]0󡒬隺pples-16-inch-m4-max-macbook-pros-are-an-sale-for-up-to-410-aff-msrp/">Read more<t><u(iv><u(iv><u(iv><u(iv> </div> �!�!u(iv> <div class="views-row views-row-4 views-row-even"> � � <div class="views-field-title"> <span class="field-content"><span class="field-content">Red Pocket Mobile is offering a $150 rebate o...</span><ztpan> �!�!u(iv> � <div class="views-field-body-1"> �!�!div class="field-content"><div class="field-content"><div class="body-row"><div style="background:#F5F5F5;">Red Pocket Mobile has new Apple iPhone 17鈥檚 on sale for $150 off MSRP when�9ou switch and open�5p a new line of service. Red Pocket Mobile is a nationwide MVNO using all the major wireless carrier... <a href="https:/|鴚w.macprices.net^r025/SD]�(W�)red-pocket-mobile-is-affering-a-0-rebate-an-any-new-iphone-17/">Read more<t><u(iv><u(iv><u(iv><u(iv> </div> �!�!u(iv> <div class="views-row views-row-5 views-row-odd"> � �!�!div class="views-field-title"> �!�!span class="field-content"><span class="field-content">Switch to Verizon, and get any iPhone 16 for...</span><ztpan> �!�!u(iv> � <div class="views-field-body-1"> �!�!div class="field-content"><div class="field-content"><div class="body-row"><div style="background:#F5F5F5;">With�9esterday鈥檚 introduction of�4he new iPhone  models, Verizon responded by running 鈥渙n us鈥 promos across much of the iPhone 16 lineup: iPhone 16 and  Plus show as $0w踥 for 0󭦌򠸖 months with bill...�!�!a href="https:]鍂ww.macprices.net/�(e�)�(ry�)]9/10ztwitch-to-verizon-and-get-any-iphone--for-free/">Read more<t><u(iv><u(iv><u(iv><u(iv> </div> �!�!u(iv> <div class="views-row views-row-6 views-row-even"> � � <div class="views-field-title"> <span class="field-content"><span class="field-content">Here is a summary of�4he new features in Appl...</span><ztpan> �!�!u(iv> � <div class="views-field-body-1"> �!�!div class="field-content"><div class="field-content"><div class="body-row"><div style="background:#F5F5F5;">Apple鈥檚 September �(e�)�(ry�) event introduced major updates across its most popular product lines, focusing on health,�0erformance, and design breakthroughs. The AirPods Pro 0򂆌򧂆鄋ow feature best-in-class...�!�!a href="https:]鍂ww.macprices.net/�(e�)�(ry�)]9/SDvvere-is-a-summary-af-the-new-features-in-apples-airpods-pro-3-iphone--models-and-apple-watch-series-11-ultra-0󕋎0雜e-3Y >Read more</a></div></div></div></div> �!�!u(iv> </div> �!�!div class="views-row�6iews-row-7�6iews-row-add"> � � <div class="views-field-title"> <span class="field-content"><span class="field-content">Apple鈥檚 Smartphone Lineup Could Use A Touch o...</span><ztpan> �!�!u(iv> � <div class="views-field-body-1"> �!�!div class="field-content"><div class="field-content"><div class="body-row"><div style="background:#F5F5F5;">COMMENTARY 鈥 2 2 2 2hatever happened�4o the old adage, 鈥渓ess is more鈥? Apple鈥檚 smartphone lineup. 鈥 which is due for its annual refresh either�4his month or next (possibly at an Apple Event on September 9... <a href="https:/|鴚w.macprices.net^r025/SD]8/apples-smartphone-lineup-could-use-a-touch-af-steve-jobss-simplicityY >Read more</a></div></div></div></div> �!�!u(iv> </div> �!�!div class="views-row�6iews-row-8�6iews-row-even"> � �!�!div class="views-field-title"> �!�!span class="field-content"><span class="field-content">Take $50 off every �th-generation A16 WiFi i...<ztpan></span> </div> � �!�!div class="views-field-body-1"> <div class="field-content"><div class="field-content"><div class="body-row"><div style="background:#F5F5F5;">Amazon has Apple鈥檚 �th-generation A16 WiFi iPads in stock on sale for $50 off MSRP right now. Shipping is free: 鈥 �鈥 �th-generation 8GB WiFi iPads: $299�.50 off MSRP 鈥 �鈥 �th-generation �(ry�)6GB...�!�!a href="https:]鍂ww.macprices.net/�(e�)�(ry�)]9/SAz薬ke-50-aff-every-1"h-generation-a-wifi-ipad-right-now-prices-start-at-299Y >Read more</a></div></div></div></div> �!�!u(iv> </div> �!�!div class="views-row�6iews-row-9�6iews-row-add"> � � <div class="views-field-title"> <span class="field-content"><span class="field-content">Sunday Sale: 14-inch M4 MacBook Pros for�5p t...</span><ztpan> �!�!u(iv> � <div class="views-field-body-1"> �!�!div class="field-content"><div class="field-content"><div class="body-row"><div style="background:#F5F5F5;">Don鈥檛 pay full�0rice�S�MAmazon has Apple鈥檚 14-inch M4 MacBook Pros (Silver and Black colors) on sale for�5p to�.�(g �)0 off MSRP right now. Shipping is free. Be sure to select Amazon as the seller, rather... <a href="https:/|鴚w.macprices.net^r025/SD]7/sunday-sale--inch-m4-macbook-pros-for-up-to-�(g �)0-off-apples-msrp/">Read more<t><u(iv><u(iv><u(iv><u(iv> </div> �!�!u(iv> <div class="views-row views-row-10�6iews-row-even views-row-last"> � � <div class="views-field-title"> <span class="field-content"><span class="field-content">Mac mini�7ith M4 Pro CPU back on sale for $1�(懷�)..</span><ztpan> �!�!u(iv> � <div class="views-field-body-1"> �!�!div class="field-content"><div class="field-content"><div class="body-row"><div style="background:#F5F5F5;">B&H Photo has Apple鈥檚 Mac mini�7ith the M4 Pro CPU back on sale for $1�(ry�)9,�.0 off MSRP. B&H offers free 1-�(N��)day shipping�4o most US addresses: 鈥 Mac mini M4 Pro CPU (�(T �)GB^GB):�.59, $...�!�!a href="https:]鍂ww.macprices.net/�(e�)�(ry�)]9/04w踑c-mini-with-m4-pro-cpu-back-an-sale-for-1�(ry�)9-0-off-apples-msrp/">Read more<t><u(iv><u(iv><u(iv><u(iv> </div> �!�!u(iv> </div> � � �!�!div class="view-footer"> �!�!div class="see_all_btn_rt"><a href="y:ricescanner"><img src=".".sites/all/themesuustom_front/imagesztee_all_btn.gif" b6</a></div> <div class="ch_bot"> </div> �!�!u(iv> � </div></div> <u(iv> <br b6 <�c-[if !IE]>end iphone add box<![endif]-->�!�!�C-[if !IE]>Start right child box3<![endif]--> �!�!div id="block-views-feeds_jobs_scanner-block_1" class="clear-block block block-views"> <h�(屒�)jobs Board</h2> �!�!div class="content"><div class="view�6iew-feeds-jobs-scanner�6iew-id-feeds_jobs_scanner view-display-id-block_1 view-dom-id-SAf1917b�(T �)59ba0󤕘0򭄀6eef78d�(R�)9dc88b"> � � � � � </div></div> <u(iv> �!�!�C-[if !IE]>end right child box3<![endif]--> </div> <�c-[if !IE]>End right content<�1 D�8endif]--><u(iv> <!--[if �jE]>start bottom row<�1 D�8endif]--> <div class="Bottom_row_link"> <ul> �!�!li><strong>SPREAD THE WORD:<zttrong></li> <li><img src="ztitest鎙lz薶emes/custom_frontv}mages/slashdot_icon.gif" alt="" b6</li> <li><a href="javascript:void%20window.open('http:/ztlashdot.org/bookmark.pl?url='+encodeURIComponent(window.location.href)+'&title='+encodeURIComponent(document.title),'popup','',0)">Slashdot<t><v頸> �!�!li><img src=".".sites/all/themesuustom_front/imagesu(iaa_icon.gif" alt=""� ><v頸> �!�!li><a href="javascript:void%�(e�)window.open('http:]錮igg.comztubmit?phase=�(N�)url='+encodeURIComponent(window.location.href)+'&ei=UTF-8','popup','',0)">Digg</a></li> <li><img src="ztitest鎙lz薶emes/custom_frontv}mages/del_icio_us_icon.gif" alt=""� ><v頸> �!�!li><a href="javascript:void%�(e�)window.open('http:]錮el.icio.us/post?url='+encodeURIComponent(window.location.href)+'&ei=UTF-8','popup','',0)">Del.icio.us</a></li> <li><img src="ztitest鎙lz薶emes/custom_frontv}mages/reddit_icon.gif" alt="" b6</li> <li><a href="javascript:void%20window.open('http:/y緀ddit.com/submit?url='+encodeURIComponent(window.location.href)+'&ei=UTF-8','popup','',0)">Reddit<t><v頸> �!�!li><img src=".".sites/all/themesuustom_front/imagesw鈋wsvine_icon.gif" alt=""� ><v頸> �!�!li><a href="javascript:void%�(e�)window.open('http:]鍂ww.newsvine.coms塼ools/seed&save?u='+encodeURIComponent(window.location.href)+'&ei=UTF-8','popup','',0)">Newsvine</a></li> <z鵯> <ul style="float: right;"> <div><li style="line-height: 20px; height:40px; width:0󡓔px;�0adding:0; margin:0"><div id="block-block-14" class="clear-block block block-block"> <div class="content"><form action="http:]錷acte.chY method="post"> <script language="JavaScript" type="textv產vascript"> document.write("<input name=\"fullurl\" type=\"hidden\" value=\""+document.location+"\" b6"); document.write("<input�4ype=\"hidden\" name=\"rnd\" value=\""+Math.round(Math.random()*99999999)+"\"� >"); <ztcript><div id="shorten_tag">Generate a short URL for�4his page:<u(iv> <p><input type="image"�6alue="" src="ztitest鎙lz薶emes/custom_frontv}mages/get_link_btn.gif" alt="Get Link"� ><br� > </p></form> <p><br� ><y:> </div> <u(iv> </li><u(iv> </ul> </div> <�c-[if !IE]>end bottom row<![endif]--></div> </div> <�c-[if !IE]>End Content<�1 D�8endif]--> <div id="footer_sep"> <div class="footer_sep_innnn"><img src="ztitest鎙lz薶emes/custom_frontv}mages/botton_sep.gif" alt=""� ><u(iv> </div> <div id="footer"> <div class="footer_top"> <div class="foo_ter"><div class="left_l_footer">MacTech Magazine.�!�!a href="http:/|鴚w.mactech.com">www.mactech.com<t> </div> �!�!div class="right_l_footer">Toll Free 877-MACTECH, Outside USe梐nada: 805-494-9797<u(iv> �!�!u(iv> �!�!div class="foo_ter_bottom"> MacTech is a registered trademark of Xplain Corporation. Xplain, "The journal of Apple�4echnology", Apple Expo, Explain It, MacDev, MacDev-1, THINK Reference, NetProfessional, Apple Expo, MacTech Central, MacTech Domains, MacNews, MacForge, and�4he MacTutorMan are�4rademarks or service marks of Xplain Corporation. Sprocket is a registered�4rademark of eSprocket Corporation. Other�4rademarks and copyrights appearing in this�0rinting or software remain�4he�0roperty of�4heir respective holders. Not responsible for typographical errors. �!�!u(iv> </div> �!�!div class="footer_bottom"></div> <u(iv> <div id="bootom_foo_ter">All contents are Copyright 1984-�(e�)� by Xplain Corporation. All rights reserved. Theme designed by <a href="http:]鍂ww.icreon.com">Icreon</a>.<u(iv> <�c- include files - mactech, all applecentral sites ]--> <!-- Kilroy left�4his breadcrumb� \q-> <script type="textv產vascript"> �6ar� gaq = _gaq�=| []; _gaq.push(['_setAccount', 'UA-760󞗑-1']); _gaq.push(['_setDomainName', 'none']); � gaq.push(['_setAllowLinker',�4rue]); � gaq.push(['_trackPageview']); (function()" �6ar ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ga.src = ('https:' == document.location.protocol ? 'https:]錽sl' : 'http:/|鴚w') + '.google-analytics.com/ga.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); })(); <ztcript> <script�4ype="text/javascript"> var _gaq =� gaq || []; � gaq.push(['_setAccount', 'UA-763-7']); � gaq.push(['_setDomainName', 'none']); _gaq.push(['_setAllowLinker', true]); _gaq.push(['_trackPageview']); (function() { var ga = document.createElement('script'); ga.type = 'textv產vascript'; ga.async =�4rue; ga.src = ('https:' == document.location.protocol ? 'https:/ztsl' : 'http:]鍂ww') + '.google-analytics.comu抋.js'; �6ar s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); �()(); </script> <!--visistat SNIPPET]--> <script type="textv產vascript"> var DID=�(R�)0; var�0check=(window.location.protocol == "https:") ? "https:]錽niff.visistat.comv頸ve.js":"http:]錽tats.visistat.comv頸ve.js"; document.writeln('<scr'+'ipt src="'+pcheck+'"�4ype="text\v產vascript"><\/scr'+'ipt>'); </script> <!--visistat SNIPPET]--> <�c-skimlinks SNIPPET]--> <script type="textv產vascript" src="http:/zt.skimresources.comv畇/7201X662�(ry�)6.skimlinks.js"></script> <!--skimlinks SNIPPET/\q-> </body> <vvtml> �<�/�d�i�v�>�<�d�i�v� �c�l�a�s�s�=�"�n�a�k�e�d�_�c�t�r�l�"�>� �<�f�o�r�m� �a�c�t�i�o�n�=�"�/�i�n�d�e�x�.�c�g�i�/�s�p�e�e�c�h�"� �m�e�t�h�o�d�=�"�g�e�t�"� �n�a�m�e�=�"�g�a�t�e�"�>� �<�p�>�<�a� �h�r�e�f�=�"�h�t�t�p�:�/�/�a�l�t�s�t�y�l�e�.�a�l�f�a�s�a�d�o�.�n�e�t�"�>�A�l�t�S�t�y�l�e�<�/�a�>� 0k00c0fY c0U00_0󳻾� �<�a� �h�r�e�f�=�"�h�t�t�p�:�/�/�p�r�e�s�e�r�v�e�.�m�a�c�t�e�c�h�.�c�o�m�/�a�r�t�i�c�l�e�s�/�m�a�c�t�e�c�h�/�V�o�l�.�2�4�/�2�4�.�0�2�/�G�e�t�t�i�n�g�S�t�a�r�t�e�d�w�i�t�h�G�i�t�/�i�n�d�e�x�.�h�t�m�l�"�>�(�-�&�g�t�;0񠏊򋎚�)�<�/�a�>� �/� �<�l�a�b�e�l�>0񇣀0�:� �<�i�n�p�u�t� �t�y�p�e�=�"�t�e�x�t�"� �n�a�m�e�=�"�n�a�k�e�d�_�p�o�s�t�_�u�r�l�"� �v�a�l�u�e�=�"�h�t�t�p�:�/�/�p�r�e�s�e�r�v�e�.�m�a�c�t�e�c�h�.�c�o�m�/�a�r�t�i�c�l�e�s�/�m�a�c�t�e�c�h�/�V�o�l�.�2�4�/�2�4�.�0�2�/�G�e�t�t�i�n�g�S�t�a�r�t�e�d�w�i�t�h�G�i�t�/�i�n�d�e�x�.�h�t�m�l�"� �s�i�z�e�=�"�2�2�"� �/�>�<�/�l�a�b�e�l�>� �<�l�a�b�e�l�>0􌢾�:� �<�s�e�l�e�c�t� �n�a�m�e�=�"�n�a�k�e�d�_�p�o�s�t�_�m�o�d�e�"�>� �<�o�p�t�i�o�n� �v�a�l�u�e�=�"�d�e�f�a�u�l�t�"�>0򹙐񝊜�<�/�o�p�t�i�o�n�>� �<�o�p�t�i�o�n� �v�a�l�u�e�=�"�s�p�e�e�c�h�"� �s�e�l�e�c�t�e�d�=�"�s�e�l�e�c�t�e�d�"�>楏X0󧥠0�<�/�o�p�t�i�o�n�>� �<�o�p�t�i�o�n� �v�a�l�u�e�=�"�r�u�b�y�"�>00覰0M�<�/�o�p�t�i�o�n�>� �<�o�p�t�i�o�n� �v�a�l�u�e�=�"�c�o�n�t�r�a�s�t�"�>慚俽S蛶�<�/�o�p�t�i�o�n�>� �<�o�p�t�i�o�n� �v�a�l�u�e�=�"�l�a�r�g�e�r�-�t�e�x�t�"�>e嘯Wb醂'�<�/�o�p�t�i�o�n�>� �<�o�p�t�i�o�n� �v�a�l�u�e�=�"�m�o�b�i�l�e�"�>0􌜆0�<�/�o�p�t�i�o�n�>� �<�/�s�e�l�e�c�t�>� �<�i�n�p�u�t� �t�y�p�e�=�"�s�u�b�m�i�t�"� �v�a�l�u�e�=�"坔y:�"� �/�>� �<�/�p�>� �<�/�f�o�r�m�>� �<�/�d�i�v�>� � �