天天看點

同步多個git倉庫同步多個git倉庫

<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>