<code>01</code>
<code>$ cat gitsync</code>
<code>02</code>
<code>#!/usr/bin/python3</code>
<code>03</code>
<code>04</code>
<code>#-*- coding: utf-8 -*-</code>
<code>05</code>
<code>##############################################</code>
<code>06</code>
<code>07</code>
<code>08</code>
<code>09</code>
<code>10</code>
<code>#basedir=os.path.dirname(os.path.dirname(os.path.abspath(__file__))) </code>
<code>11</code>
<code>12</code>
<code>try</code><code>:</code>
<code>13</code>
<code> </code><code>#sys.path.append(basedir + '/lib/python3.3/site-packages') </code>
<code>14</code>
<code> </code><code>import</code> <code>os,io,sys,subprocess</code>
<code>15</code>
<code> </code><code>import</code> <code>logging, configparser</code>
<code>16</code>
<code> </code><code>import</code> <code>threading</code>
<code>17</code>
<code> </code><code>from</code> <code>optparse </code><code>import</code> <code>optionparser, optiongroup</code>
<code>18</code>
<code> </code><code>import</code> <code>time</code>
<code>19</code>
<code> </code><code>from</code> <code>datetime </code><code>import</code> <code>datetime </code>
<code>20</code>
<code> </code><code>import</code> <code>getpass</code>
<code>21</code>
<code>except</code> <code>importerror as err:</code>
<code>22</code>
<code> </code><code>print</code><code>(</code><code>"error: %s"</code> <code>%</code><code>(err))</code>
<code>23</code>
<code>24</code>
<code>workspace</code><code>=</code><code>os.path.expanduser(</code><code>'~/workspace'</code><code>)</code>
<code>25</code>
<code>config </code><code>=</code> <code>none</code>
<code>26</code>
<code>inifile </code><code>=</code> <code>'git.ini'</code>
<code>27</code>
<code>28</code>
<code>29</code>
<code> </code><code>if</code> <code>not</code> <code>os.path.exists(inifile):</code>
<code>30</code>
<code> </code><code>raise</code> <code>exception(</code><code>'cannot open file'</code><code>, inifile)</code>
<code>31</code>
<code> </code><code>config </code><code>=</code> <code>configparser.safeconfigparser()</code>
<code>32</code>
<code> </code><code>config.read(inifile)</code>
<code>33</code>
<code>34</code>
<code>except</code> <code>configparser.nosectionerror as err:</code>
<code>35</code>
<code> </code><code>print</code><code>(</code><code>"error: %s %s"</code> <code>%</code><code>(err, inifile))</code>
<code>36</code>
<code> </code><code>sys.exit(</code><code>1</code><code>)</code>
<code>37</code>
<code>except</code> <code>exception as err:</code>
<code>38</code>
<code>39</code>
<code>40</code>
<code>conf </code><code>=</code> <code>{}</code>
<code>41</code>
<code>42</code>
<code>if</code> <code>not</code> <code>os.path.isdir(workspace):</code>
<code>43</code>
<code> </code><code>os.makedirs(workspace)</code>
<code>44</code>
<code>os.chdir(workspace)</code>
<code>45</code>
<code>for</code> <code>sect </code><code>in</code> <code>config.sections():</code>
<code>46</code>
<code> </code><code>print</code><code>(</code><code>'===== '</code><code>+</code><code>sect</code><code>+</code><code>' ====='</code><code>)</code>
<code>47</code>
<code> </code><code>conf </code><code>=</code> <code>dict</code><code>(config.items(sect))</code>
<code>48</code>
<code> </code><code>source </code><code>=</code> <code>conf[</code><code>'origin'</code><code>].split(</code><code>':'</code><code>)[</code><code>1</code><code>]</code>
<code>49</code>
<code> </code><code>#print(source)</code>
<code>50</code>
<code> </code><code>if</code> <code>not</code> <code>os.path.isdir(source):</code>
<code>51</code>
<code> </code><code>if</code> <code>not</code> <code>os.path.isdir(source</code><code>+</code><code>'/.git'</code><code>):</code>
<code>52</code>
<code> </code><code>cmd </code><code>=</code> <code>'git clone '</code> <code>+</code> <code>conf[</code><code>'origin'</code><code>] </code><code>+</code><code>' '</code><code>+</code> <code>source;</code>
<code>53</code>
<code> </code><code>os.system(cmd)</code>
<code>54</code>
<code> </code><code>#print(cmd)</code>
<code>55</code>
<code> </code><code>if</code> <code>os.path.isdir(source) :</code>
<code>56</code>
<code> </code><code>os.chdir(source)</code>
<code>57</code>
<code> </code><code>for</code> <code>remote </code><code>in</code> <code>conf[</code><code>'remote'</code><code>].split(</code><code>','</code><code>) :</code>
<code>58</code>
<code> </code><code>cmd </code><code>=</code> <code>'git remote add '</code> <code>+</code> <code>remote</code>
<code>59</code>
<code> </code><code>os.system(cmd)</code>
<code>60</code>
<code> </code><code>#print(remote)</code>
<code>61</code>
<code> </code><code>#print(cmd)</code>
<code>62</code>
<code> </code><code>os.chdir(workspace)</code>
<code>63</code>
<code> </code><code>else</code><code>:</code>
<code>64</code>
<code> </code><code>os.chdir(source) </code>
<code>65</code>
<code> </code><code>os.system(</code><code>'git reset --hard'</code><code>)</code>
<code>66</code>
<code> </code><code>os.system(</code><code>'git pull origin'</code><code>)</code>
<code>67</code>
<code>68</code>
<code> </code><code>cmd </code><code>=</code> <code>'git remote'</code>
<code>69</code>
<code> </code><code>remote </code><code>=</code> <code>subprocess.getoutput(cmd)</code>
<code>70</code>
<code> </code><code>for</code> <code>current </code><code>in</code> <code>remote.split(</code><code>"\n"</code><code>):</code>
<code>71</code>
<code> </code><code>if</code> <code>current !</code><code>=</code> <code>'origin'</code><code>:</code>
<code>72</code>
<code> </code><code>print</code><code>(</code><code>'----- '</code><code>+</code><code>current</code><code>+</code><code>' -----'</code><code>)</code>
<code>73</code>
<code> </code><code>push </code><code>=</code> <code>'git push '</code><code>+</code><code>current</code><code>+</code> <code>' master'</code>
<code>74</code>
<code> </code><code>os.system(push)</code>
<code>75</code>
<code>1</code>
<code>$ cat git.ini</code>
<code>2</code>
<code>3</code>
<code>4</code>
<code>5</code>
<code>6</code>
<code>origin 是源,remote是目的地,可以寫多個,使用逗号分隔。</code>