คำตอบ:
ฉันคิดว่า Git บน Dropbox นั้นยอดเยี่ยม ฉันใช้มันตลอดเวลา ฉันมีคอมพิวเตอร์หลายเครื่อง (ที่บ้านสองเครื่องและอีกที่ทำงาน) ที่ฉันใช้ Dropbox เป็นที่เก็บส่วนกลาง เนื่องจากฉันไม่ต้องการให้โฮสต์บนบริการสาธารณะและฉันไม่สามารถเข้าถึงเซิร์ฟเวอร์ที่ฉันสามารถใช้งานได้ตลอดเวลา Dropbox ดูแลสิ่งนี้โดยการซิงค์ (เร็วมาก) ในพื้นหลัง
การตั้งค่าเป็นดังนี้:
~/project $ git init
~/project $ git add .
~/project $ git commit -m "first commit"
~/project $ cd ~/Dropbox/git
~/Dropbox/git $ git init --bare project.git
~/Dropbox/git $ cd ~/project
~/project $ git remote add origin ~/Dropbox/git/project.git
~/project $ git push -u origin master
จากตรงนั้นคุณสามารถโคลนได้~/Dropbox/git/project.git
ว่าคุณเชื่อมโยงกับบัญชี Dropbox ของคุณ (หรือแชร์ไดเรกทอรีนี้กับคนอื่น) คุณสามารถดำเนินการตามปกติ Git ทั้งหมดและพวกเขาจะซิงค์กับเครื่องอื่น ๆ ของคุณโดยอัตโนมัติ
ฉันเขียนบล็อกโพสต์ในการควบคุมเวอร์ชัน ( ลิงก์เก่า ตาย ) เกี่ยวกับเหตุผลของฉันและวิธีการตั้งค่าสภาพแวดล้อมของฉันมันขึ้นอยู่กับประสบการณ์การพัฒนาRuby on Railsของฉันแต่สามารถนำไปใช้กับอะไรก็ได้
วิธีที่ถูกต้องในการทำเช่นนี้คือใช้ git-remote-dropbox: https://github.com/anishathalye/git-remote-dropbox
การสร้าง repo เปล่าของคุณเองใน Dropbox ทำให้เกิดปัญหามากมาย Anish (ผู้สร้างห้องสมุด) อธิบายได้ดีที่สุด :
สาเหตุหลักของปัญหาเหล่านี้คือไคลเอ็นต์เดสก์ท็อป Dropbox ได้รับการออกแบบมาสำหรับการซิงค์ไฟล์ไม่ใช่ที่เก็บ Git หากไม่มีการจัดการเป็นพิเศษสำหรับที่เก็บ Git ก็ไม่ได้รับประกันการรับประกันเช่นเดียวกับ Git การดำเนินการบนพื้นที่เก็บข้อมูลระยะไกลไม่ใช่อะตอมอีกต่อไปและการดำเนินการที่เกิดขึ้นพร้อมกันหรือช่วงเวลาที่โชคไม่ดีด้วยการซิงโครไนซ์อาจส่งผลให้เกิดที่เก็บข้อมูลที่เสียหาย
Git ดั้งเดิมรีโมตโค้ดที่ด้านเซิร์ฟเวอร์เพื่อให้ทำงานได้อย่างถูกต้อง แต่เราไม่สามารถทำได้
วิธีแก้ปัญหา: เป็นไปได้ที่จะแก้ปัญหานี้อย่างถูกต้อง เป็นไปได้ที่จะใช้ Git กับ Dropbox และมีการรับประกันความปลอดภัยและความมั่นคงเหมือนกันกับ Git ทางไกลแม้ว่าจะมีผู้ใช้หลายคนและการทำงานพร้อมกัน!
สำหรับผู้ใช้มันง่ายเหมือนการใช้ git-remote-dropbox ผู้ช่วยระยะไกล Git ที่ทำหน้าที่เป็นสะพานเชื่อมสองทิศทางที่โปร่งใสระหว่าง Git และ Dropbox และรับประกันการรับประกันของ Git แบบดั้งเดิมทั้งหมด แม้จะปลอดภัยที่จะใช้กับโฟลเดอร์ที่ใช้ร่วมกันดังนั้นจึงสามารถใช้สำหรับการทำงานร่วมกันได้ (มี repos ส่วนตัวไม่ จำกัด พร้อมผู้ทำงานร่วมกันไม่ จำกัด !)
ด้วยเครื่องมือช่วยเหลือระยะไกลคุณสามารถใช้ Dropbox เป็นรีโมท Git และใช้คำสั่ง Git ปกติทั้งหมดเช่น git clone, git pull และ git push และทุกอย่างจะทำงานได้อย่างที่คาดไว้
คำตอบนี้ขึ้นอยู่กับประสบการณ์ของMercurialไม่ใช่ Git แต่ประสบการณ์นี้กล่าวว่าการใช้ Dropbox ด้วยวิธีนี้จะขอพื้นที่เก็บข้อมูลที่เสียหายหากมีโอกาสที่คุณจะอัปเดตพื้นที่เก็บข้อมูลที่ใช้ Dropbox เดียวกันจากเครื่องต่างๆในเวลาต่างๆ (Mac Unix, Windows ในกรณีของฉัน)
ฉันไม่มีรายการที่สมบูรณ์ของสิ่งที่ผิดพลาด แต่นี่เป็นตัวอย่างเฉพาะที่ทำให้ฉันรู้สึกแย่ แต่ละเครื่องมีความคิดของตัวละครในตอนท้ายและวิธีจัดการอักขระตัวพิมพ์ใหญ่ / เล็กในชื่อไฟล์ Dropbox และ Git / Mercurial จัดการสิ่งนี้แตกต่างกันเล็กน้อย (ฉันไม่จำความแตกต่างที่แน่นอน) หาก Dropbox อัปเดตที่เก็บด้านหลัง Git / Mercurial ด้านหลัง, presto, ที่เก็บที่ใช้งานไม่ได้ สิ่งนี้เกิดขึ้นทันทีและมองไม่เห็นดังนั้นคุณจึงไม่ทราบว่าที่เก็บข้อมูลของคุณเสียจนกว่าคุณจะพยายามกู้คืนบางสิ่งจากมัน
หลังจากขุดออกมาจากสิ่งหนึ่งที่ทำสิ่งนี้ฉันได้ใช้สูตรต่อไปนี้ที่ประสบความสำเร็จและไม่มีวี่แววของปัญหา เพียงย้ายที่เก็บข้อมูลของคุณออกจาก Dropbox ใช้ Dropbox สำหรับทุกสิ่ง เอกสาร, ไฟล์ JARอะไรก็ได้ที่คุณต้องการ และใช้GitHub (Git) หรือBitbucket (Mercurial) เพื่อจัดการพื้นที่เก็บข้อมูลเอง ทั้งสองเป็นอิสระดังนั้นสิ่งนี้จะไม่เพิ่มค่าใช้จ่ายใด ๆ และตอนนี้เครื่องมือแต่ละชิ้นก็เล่นได้ถึงจุดแข็งของมัน
การรัน Git / Mercurial ที่ด้านบนของ Dropbox ไม่ได้เพิ่มความเสี่ยง แต่อย่างใด อย่าทำมัน
สำหรับทีมเล็ก ๆ ที่ใช้ Dropbox:
หากนักพัฒนาซอฟต์แวร์แต่ละคนมีพื้นที่เก็บข้อมูลเปลือยที่เขียนได้ของตนเองบน Dropbox ซึ่งจะถูกดึงไปยังผู้พัฒนารายอื่นเท่านั้นสิ่งนี้จะช่วยให้การใช้รหัสร่วมกันโดยไม่มีความเสี่ยงต่อการทุจริต!
ถ้าคุณต้องการ 'การฉีด' แบบรวมศูนย์คุณสามารถให้ผู้พัฒนารายหนึ่งจัดการการผลักดันทั้งหมดจาก repo ของพวกเขาเอง
ฉันไม่ต้องการวางโครงการทั้งหมดของฉันไว้ในที่เก็บ Git เดียวและไม่ต้องการเข้าไปและเรียกใช้รหัสนี้สำหรับทุก ๆ โครงการดังนั้นฉันจึงสร้างBash script ที่จะทำให้กระบวนการทำงานโดยอัตโนมัติ คุณสามารถใช้มันกับหนึ่งหรือหลายไดเรกทอรี - ดังนั้นมันสามารถทำรหัสในโพสต์นี้สำหรับคุณหรือมันสามารถทำได้ในหลายโครงการในครั้งเดียว
#!/bin/sh
# Script by Eli Delventhal
# Creates Git projects for file folders by making the origin Dropbox. You will need to install Dropbox for this to work.
# Not enough parameters, show help.
if [ $# -lt 1 ] ; then
cat<<HELP
projects_to_git.sh -- Takes a project folder and creates a Git repository for it on Dropbox
USAGE:
./projects_to_git.sh file1 file2 ..
EXAMPLES:
./projects_to_git.sh path/to/MyProjectDir
Creates a git project called MyProjectDir on Dropbox
./projects_to_git.sh path/to/workspace/*
Creates a git project on Dropbox for every folder contained within the workspace directory, where the project name matches the folder name
HELP
exit 0
fi
# We have enough parameters, so let's actually do this thing.
START_DIR=$(pwd)
# Make sure we have a connection to Dropbox
cd ~
if [ -s 'Dropbox' ] ; then
echo "Found Dropbox directory."
cd Dropbox
if [ -s 'git' ] ; then
echo " Dropbox Git directory found."
else
echo " Dropbox Git directory created."
mkdir git
fi
else
echo "You do not have a Dropbox folder at ~/Dropbox! Install Dropbox. Aborting..."
exit 0
fi
# Process all directories matching the passed parameters.
echo "Starting processing for all files..."
for PROJ in $*
do
if [ -d $PROJ ] ; then
PROJNAME=$(basename $PROJ)
echo " Processing $PROJNAME..."
# Enable Git with this project.
cd $PROJ
if [ -s '.git' ] ; then
echo " $PROJNAME is already a Git repository, ignoring..."
else
echo " Initializing Git for $PROJNAME..."
git init -q
git add .
git commit -m "Initial creation of project." -q
# Make the origin Dropbox.
cd ~/Dropbox/git
if [ -s $PROJNAME ] ; then
echo " Warning! $PROJNAME already exists in Git! Ignoring..."
else
echo " Putting $PROJNAME project on Dropbox..."
mkdir $PROJNAME
cd $PROJNAME
git init -q --bare
fi
# Link the project to the origin
echo " Copying local $PROJNAME to Dropbox..."
cd $PROJ
git remote add origin "~/Dropbox/git/$PROJNAME"
git push -q origin master
git branch --set-upstream master origin/master
fi
fi
done
echo "Done processing all files."
cd $START_DIR
ฉันไม่คิดว่าการใช้ Git และ Dropbox เป็นวิธีที่จะไป ... แค่คิดเกี่ยวกับคุณสมบัติของทั้งสอง:
Git:
Dropbox:
และถ้าคุณกังวลเกี่ยวกับการแชร์ไฟล์บางไฟล์ทำไมไม่ลองเข้ารหัสมันล่ะ? และจากนั้นคุณจะได้รับประโยชน์มากที่สุดจาก Dropbox to Git นั่นคือมีไฟล์สาธารณะและส่วนตัว ...
ตอนนี้เป็นปี 2558 และเมื่อสามวันที่ผ่านมาเครื่องมือใหม่ที่ใช้Dropbox API v2ได้ถูกสร้างขึ้นเพื่อใช้งานคอมไพล์อย่างปลอดภัยบน Dropbox ใช้งานได้กับ API แทนที่จะใช้เดสก์ท็อปไคลเอ็นต์และจัดการการพุชหลายครั้งพร้อมกันไปยังที่เก็บที่โฮสต์ในโฟลเดอร์ที่แชร์อย่างถูกต้อง
เมื่อกำหนดค่าแล้วจะอนุญาตให้หนึ่งตั้งค่ารีโมท Git เหมือนกับรีโมท Git อื่น ๆ
git clone "dropbox::/path/to/repo"
git remote add origin "dropbox::/path/to/repo"
ผมใช้ Mercurial (หรือ Git) + + TrueCrypt Dropbox สำหรับการเข้ารหัสระยะไกลการสำรองข้อมูล
สิ่งที่ยอดเยี่ยมที่สุดคือ Dropbox จะไม่ซิงค์ทั้ง TrueCrypt container หากคุณแก้ไขส่วนเล็ก ๆ ของรหัสของคุณ เวลาในการซิงค์นั้นแปรผันตามปริมาณการเปลี่ยนแปลง แม้ว่าจะมีการเข้ารหัส แต่การรวมกันของ TrueCrypt + Dropbox ทำให้สามารถใช้การซิงค์ระดับบล็อกและตัวเลขระดับบล็อกได้อย่างยอดเยี่ยม
ประการที่สองภาชนะเข้ารหัสเสาหินไม่เพียงแค่เพิ่มการรักษาความปลอดภัยก็ยังช่วยลดโอกาสในการเก็บข้อมูลการทุจริต
ข้อควรระวัง:อย่างไรก็ตามคุณต้องระมัดระวังไม่ให้มีการติดตั้งคอนเทนเนอร์ในขณะที่ Dropbox ทำงานอยู่ นอกจากนี้ยังอาจเป็นความเจ็บปวดในการแก้ไขข้อขัดแย้งหากไคลเอนต์ 2 คนเช็คอินในเวอร์ชันที่แตกต่างกันไปยังคอนเทนเนอร์ ดังนั้นจึงมีประโยชน์สำหรับคนเดียวที่ใช้มันเพื่อสำรองข้อมูลไม่ใช่สำหรับทีม
ติดตั้ง:
preserve modification timestamp
*การใช้งาน:
PS ยกเลิกการเลือกpreserve modification timestamp
บอกดรอปบ็อกซ์ว่าไฟล์ได้รับการแก้ไขและควรซิงค์ โปรดทราบว่าการติดตั้งคอนเทนเนอร์จะแก้ไขการประทับเวลาแม้ว่าคุณจะไม่เปลี่ยนแปลงไฟล์ใด ๆ ก็ตาม หากคุณไม่ต้องการที่จะเกิดขึ้นเพียงเมานไดรฟ์เป็นread-only
ฉันรักคำตอบของ Dan McNevin! ตอนนี้ฉันใช้ Git และ Dropbox ด้วยกันและฉันใช้นามแฝงหลายรายการใน. bash_profileของฉันเพื่อให้เวิร์กโฟลว์ของฉันมีลักษณะดังนี้:
~/project $ git init
~/project $ git add .
~/project $ gcam "first commit"
~/project $ git-dropbox
นี่คือนามแฝงของฉัน:
alias gcam='git commit -a -m'
alias gpom='git push origin master'
alias gra='git remote add origin'
alias git-dropbox='TMPGP=~/Dropbox/git/$(pwd | awk -F/ '\''{print $NF}'\'').git;mkdir -p $TMPGP && (cd $TMPGP; git init --bare) && gra $TMPGP && gpom'
เราใช้วิธีนี้ (สร้างที่เก็บเปลือยใน Dropbox) ในโฟลเดอร์แชร์โฟลเดอร์ที่ใช้ร่วม
กลุ่มนักพัฒนาขนาดเล็กสามารถดึงจากที่เก็บซิงค์ที่เปลือยเปล่าและสร้างโคลนท้องถิ่น เมื่อหน่วยการทำงานเสร็จสิ้นเราจะผลักดันกลับไปที่จุดเริ่มต้น
สิ่งหนึ่งที่ฉันขาดหายไปคือวิธีที่ดีในการส่งอีเมลพร้อมกับข้อมูลชุดการเปลี่ยนแปลงเมื่อมีการส่งถึงแหล่งกำเนิด เรากำลังใช้ Google Wave เพื่อติดตามการเปลี่ยนแปลงด้วยตนเอง
ฉันใช้ Mercurial ในลักษณะที่แนะนำและขอให้คุณระมัดระวังโดยเฉพาะอย่างยิ่งหากมีเครื่องแตกต่างกัน Dropbox fora เต็มไปด้วยข้อร้องเรียนเกี่ยวกับปัญหาชื่อไฟล์ลึกลับที่ปรากฎขึ้นเองตามธรรมชาติ Hg (และฉันเข้าใจ Git) จะไม่แจ้งให้ทราบหรือบ่นในระหว่างการตรวจสอบตามปกติและคุณจะได้ยินเกี่ยวกับความเสียหายเมื่อบ่นว่า repo ที่เสียหายเมื่อคุณพยายามใช้งานจริง ข่าวร้าย. หวังว่าฉันจะได้เฉพาะเจาะจงมากขึ้นเกี่ยวกับปัญหาและวิธีแก้ปัญหา ฉันยังคงพยายามที่จะขุดออกจากระเบียบนี้ด้วยตัวเอง
นอกจากนี้ยังมีโครงการโอเพ่นซอร์ส (ชุดรวมสคริปต์ข้ามแพลตฟอร์ม [Linux, Mac, Win]) ที่ทำรายละเอียดทั้งหมดของการจัดการพื้นที่เก็บข้อมูลด้วยคำสั่งจำนวนเล็กน้อย (3-4)
https://github.com/karalabe/gitbox/wiki
ตัวอย่างการใช้งาน:
$ gitbox create myapp
Creating empty repository...
Initializing new repository...
Repository successfully created.
$ gitbox clone myapp
Cloning repository...
Repository successfully cloned.
หลังจากนั้นการใช้งานคอมไพล์ปกติ:
$ echo “Some change” > somefile.txt
$ git add somefile.txt
$ git commit –m “Created some file”
$ git push
ตรวจสอบวิกิโครงการและคู่มือสำหรับการอ้างอิงคำสั่งเต็มรูปแบบและแบบฝึกหัด
ฉันเก็บ repo ที่ไม่ใช่ Github บน Dropbox ข้อแม้หนึ่งที่ฉันพบคือการซิงค์หลังจากติดตั้งใหม่ Dropbox จะดาวน์โหลดไฟล์ที่เล็กที่สุดก่อนที่จะย้ายไปยังไฟล์ที่มีขนาดใหญ่กว่า ไม่ใช่ปัญหาถ้าคุณเริ่มตอนกลางคืนและกลับมาหลังจากวันหยุดสุดสัปดาห์ :-)
กระทู้ของฉัน - http://forums.dropbox.com/topic.php?id=29984&replies=6
ตอนนี้ในปี 2014 ฉันใช้ Git และ Dropbox มาประมาณหนึ่งปีครึ่งโดยไม่มีปัญหา บางจุดแม้ว่า:
git push
พุชไปที่ที่เก็บรีโมตดังนั้นถ้ามันเสียหายฉันจะสามารถกู้คืนได้อย่างง่ายดายC:\Users
ด้วยmklink /D link target
เพราะห้องสมุดบางแห่งชี้ไปที่ตำแหน่งแน่นอนฉันชอบคำตอบที่ได้รับการโหวตจาก Dan McNevin ฉันลงเอยด้วยการเรียงลำดับคำสั่ง git หลายครั้งเกินไปและตัดสินใจสร้างสคริปต์ ดังนั้นนี่คือ:
#!/bin/bash
# Usage
usage() {
echo "Usage: ${0} -m [ master-branch-directory ] -r [ remote-branch-directory ] [ project-name ]"
exit 1
}
# Defaults
defaults() {
masterdir="${HOME}/Dropbox/git"
remotedir="${PWD}"
gitignorefile="# OS generated files #\n\n.DS_Store\n.DS_Store?\n.Spotlight-V100\n.Trashes\nehthumbs.db\nThumbs.db"
}
# Check if no arguments
if [ ${#} -eq 0 ] ; then
echo "Error: No arguments specified"
usage
fi
#Set defaults
defaults
# Parse arguments
while [ ${#} -ge 1 ]; do
case "${1}" in
'-h' | '--help' ) usage ;;
'-m' )
shift
masterdir="${1}"
;;
'-r' )
shift
remotedir="${1}"
;;
* )
projectname="${1##*/}"
projectname="${projectname%.git}.git"
;;
esac
shift
done
# check if specified directories and project name exists
if [ -z "${projectname}" ]; then
echo "Error: Project name not specified"
usage
fi
if [ ! -d "${remotedir}" ]; then
echo "Error: Remote directory ${remotedir} does not exist"
usage
fi
if [ ! -d "${masterdir}" ]; then
echo "Error: Master directory ${masterdir} does not exist"
usage
fi
#absolute paths
remotedir="`( cd \"${remotedir}\" && pwd )`"
masterdir="`( cd \"${masterdir}\" && pwd )`"
#Make master git repository
cd "${masterdir}"
git init --bare "${projectname}"
#make local repository and push to master
cd "${remotedir}"
echo -e "${gitignorefile}" > .gitignore # default .gitignore file
git init
git add .
git commit -m "first commit"
git remote add origin "${masterdir}/${projectname}"
git push -u origin master
#done
echo "----- Locations -----"
echo "Remote branch location: ${remotedir}"
echo "Master branch location: ${masterdir}"
echo "Project Name: ${projectname}"
สคริปต์ต้องการชื่อโครงการเท่านั้น มันจะสร้างพื้นที่เก็บข้อมูลคอมไพล์ใน~/Dropbox/git/
ภายใต้ชื่อที่ระบุและจะผลักดันเนื้อหาทั้งหมดของไดเรกทอรีปัจจุบันไปยังสาขาต้นแบบต้นแบบที่สร้างขึ้นใหม่ หากมีการกำหนดชื่อโครงการมากกว่าหนึ่งชื่ออาร์กิวเมนต์ชื่อโครงการที่ถูกต้องที่สุดจะถูกนำมาใช้
เป็นทางเลือกอาร์กิวเมนต์คำสั่ง -r ระบุสาขาระยะไกลที่จะผลักดันไปยังต้นแบบต้นแบบ ตำแหน่งของต้นแบบต้นฉบับของโครงการยังสามารถระบุได้ด้วยอาร์กิวเมนต์ -m ไฟล์. gitignore เริ่มต้นจะอยู่ในไดเรกทอรีสาขาระยะไกลด้วย มีการระบุค่าเริ่มต้นของไดเรกทอรีและแฟ้ม. gitignore ในสคริปต์
วิธีอื่น:
คำตอบทั้งหมดจนถึงขณะนี้รวมถึง@Danซึ่งเป็นคำตอบที่ได้รับความนิยมมากที่สุดกล่าวถึงแนวคิดของการใช้ Dropbox เพื่อรวมศูนย์ที่เก็บข้อมูลที่ใช้ร่วมกันแทนที่จะใช้บริการที่เน้น git เช่น github, bitbucket เป็นต้น
แต่เนื่องจากคำถามเดิมไม่ได้ระบุสิ่งที่ใช้ "Git และ Dropbox ร่วมกันอย่างมีประสิทธิภาพ" จริงๆแล้วเรามาลองใช้วิธีอื่น: "การใช้ Dropbox เพื่อซิงค์เฉพาะ worktree"
วิธีการมีขั้นตอนเหล่านี้:
ภายในไดเรกทอรีโครงการหนึ่งสร้าง.git
ไดเรกทอรีว่าง(เช่นmkdir -p myproject/.git
)
ยกเลิกการซิงค์.git
ไดเรกทอรีใน Dropbox หากใช้แอพ Dropbox: ไปที่การตั้งค่าการซิงค์และ "เลือกโฟลเดอร์ที่จะซิงค์" ซึ่ง.git
ไดเรกทอรีจะต้องถูกยกเลิกการทำเครื่องหมาย จะเป็นการลบ.git
ไดเรกทอรี
เรียกใช้git init
ในไดเรกทอรีโครงการ
นอกจากนี้ยังใช้งานได้หาก.git
มีอยู่แล้วทำขั้นตอนที่ 2 เท่านั้น Dropbox จะเก็บสำเนาของไฟล์ git ในเว็บไซต์
ขั้นตอนที่ 2 จะทำให้ Dropbox ไม่ซิงค์โครงสร้างระบบ git ซึ่งเป็นผลลัพธ์ที่ต้องการสำหรับวิธีการนี้
ทำไมต้องใช้วิธีนี้
การเปลี่ยนแปลงที่ยังไม่ได้ผลักจะมีการสำรองข้อมูล Dropbox และพวกเขาจะซิงค์กับอุปกรณ์
ในกรณีที่ Dropbox สกรูบางสิ่งบางอย่างเมื่อทำการซิงค์ระหว่างอุปกรณ์git status
และgit diff
จะเป็นประโยชน์ในการจัดเรียงสิ่งต่าง ๆ
มันช่วยประหยัดพื้นที่ในบัญชี Dropbox (ประวัติทั้งหมดจะไม่ถูกเก็บไว้ที่นั่น)
มันหลีกเลี่ยงความกังวลที่เกิดขึ้นโดย @dubek และ @Ates ในการแสดงความคิดเห็นเกี่ยวกับ @ คำตอบของแดนและความกังวลโดย @clu ในคำตอบอื่น
การมีรีโมตอยู่ที่อื่น (github ฯลฯ ) จะใช้ได้ดีกับวิธีนี้
การทำงานในสาขาต่าง ๆ นำมาซึ่งปัญหาที่ต้องได้รับการดูแล:
ปัญหาหนึ่งที่อาจเกิดขึ้นคือมี Dropbox (โดยไม่จำเป็น?) ทำการซิงค์ไฟล์จำนวนมากที่อาจเกิดขึ้นเมื่อตรวจสอบสาขาที่แตกต่างกัน
หากอุปกรณ์ที่ซิงค์ข้อมูล Dropbox สองรายการขึ้นไปมีสาขาต่างกันชำระเงินการเปลี่ยนแปลงที่ไม่ได้ทำไว้กับอุปกรณ์ทั้งสองนั้นอาจสูญหายได้
วิธีหนึ่งในการแก้ไขปัญหาเหล่านี้คือการใช้git worktree
เพื่อเก็บเงินจากสาขาในไดเรกทอรีแยกต่างหาก
xattr -w com.dropbox.ignored 1 /path/to/somewhere
สถานะต่อไปนี้ไฟล์สำหรับการละเว้น
สำหรับ Dropbox 2 เซนต์ของฉันทำให้รู้สึกได้ถึงการใช้งานส่วนตัวซึ่งคุณไม่ต้องการรบกวนการรับโฮสต์ repo ส่วนกลาง สำหรับการพัฒนาทางอาชีพใด ๆ คุณอาจสร้างปัญหามากกว่าที่คุณจะแก้ปัญหาดังที่ได้กล่าวไว้หลายครั้งในเธรดแล้ว Dropbox ไม่ได้ออกแบบมาสำหรับกรณีการใช้งานนี้ วิธีดังกล่าวมีความปลอดภัยอย่างสมบูรณ์ในการทิ้งที่เก็บข้อมูลบน Dropbox โดยไม่มีปลั๊กอินหรือเครื่องมือของบุคคลที่สามใด ๆ คือใช้มัด ฉันมีนามแฝงต่อไปนี้.gitconfig
เพื่อบันทึกการพิมพ์:
[alias]
bundle-push = "!cd \"${GIT_PREFIX:-.}\" && if path=\"$(git config remote.\"$1\".url)\" && [ \"${path:0:1}\" = / ]; then git bundle create \"$path\" --all && git fetch \"$1\"; else echo \"Not a bundle remote\"; exit 1; fi #"
bundle-fetch = "!cd \"${GIT_PREFIX:-.}\" && if path=\"$(git config remote.\"$1\".url)\" && [ \"${path:0:1}\" = / ]; then git bundle verify \"$path\" && git fetch \"$1\"; else echo \"Not a bundle remote\"; exit 1; fi #"
bundle-new = "!cd \"${GIT_PREFIX:-.}\" && if [ -z \"${1:-}\" -o -z \"${2:-}\" ]; then echo \"Usage: git bundle-new <file> <remote name>\"; exit 1; elif [ -e \"$2\" ]; then echo \"File exist\"; exit 1; else git bundle create \"$2\" --all && git remote add -f \"$1\" \"$(realpath \"$2\")\"; fi #"
ตัวอย่าง:
# Create bundle remote (in local repo)
$ git bundle-new dropbox ~/Dropbox/my-repo.bundle
# Fetch updates from dropbox
$ git bundle-fetch dropbox
# NOTE: writes over previous bundle. Thus, roughly equivalent to push --force --prune --all
$ git bundle-push
ฉันได้พบกับปัญหาที่คล้ายกันและได้สร้างสคริปต์เล็ก ๆ สำหรับเหมือนกัน แนวคิดคือการใช้ Dropbox กับ Git อย่างง่ายที่สุด ขณะนี้ฉันใช้รหัสทับทิมอย่างรวดเร็วและฉันจะเพิ่มอีกไม่นาน
https://github.com/nuttylabs/box-git
สคริปต์ที่สามารถเข้าถึงได้
โดยไม่ต้องใช้เครื่องมือการรวมบุคคลที่สามฉันสามารถปรับปรุงเงื่อนไขเล็กน้อยและใช้ DropBox และบริการดิสก์คลาวด์อื่น ๆ ที่คล้ายคลึงกันเช่น SpiderOak กับ Git
เป้าหมายคือเพื่อหลีกเลี่ยงการซิงโครไนซ์ที่อยู่ตรงกลางของการแก้ไขไฟล์เหล่านี้เนื่องจากมันสามารถอัปโหลดสถานะบางส่วนแล้วจะดาวน์โหลดกลับมาอีกครั้งทำให้สถานะคอมไพล์ของคุณเสียหายอย่างสมบูรณ์
เพื่อหลีกเลี่ยงปัญหานี้ฉันได้:
git bundle create my_repo.git --all
ดัชนีคอมไพล์ของฉันในหนึ่งไฟล์โดยใช้มันไม่สมบูรณ์แบบเนื่องจากไม่มีการรับประกันว่าจะไม่ทำให้สถานะของ git ยุ่งเหยิงอีกต่อไป แต่มันช่วยและในขณะที่ฉันไม่ได้รับปัญหาใด ๆ
ใน MacOS คุณสามารถหยุด Dropbox ทำการเปลี่ยนแปลงแล้วเปิด Dropbox อีกครั้ง ฉันใช้ชุดค่าผสมต่อไปนี้และมีความสุขมากกับ:
ในทั้งสอง (ไดเรกทอรีโครงการที่จัดการโดย git ในพื้นที่ของคุณและที่เก็บ git ระยะไกลของคุณอยู่ที่ Dropbox) ให้เรียกใช้คำสั่งต่อไปนี้เพื่อปิดการใช้งานการบรรจุอัตโนมัติ (ซึ่งเป็นปัญหาหลักของการซิงค์ดรอปบ็อกซ์)
git config --global gc.auto 0
จากนั้นบีบอัดที่เก็บเป็นครั้งคราวโดยปิดใช้งานดรอปบ็อกซ์ ตัวอย่างเช่นฉันทำสิ่งต่อไปนี้ใน bash-build-script ทุกครั้งที่ฉันเปิดตัวแอปใหม่
osascript -e "tell application \"Dropbox\" to quit"
# Compress local
git gc --prune=now; git repack -a -d
# Compress remote
REPOS_DIR_REMOTE=`git remote get-url --push origin`
cd "${REPOS_DIR_REMOTE}"
git gc --prune=now; git repack -a -d
osascript -e "tell application \"Dropbox\" to launch"
osascript -e "display notification with title \"Compress Done\""