Tôi đang sử dụng git để quản lý dự án grails mà tôi có. Tôi thiết lập một kho git trên một máy chủ từ xa và những gì tôi muốn làm là khi tôi có mã làm việc cục bộ, tôi muốn cam kết nó và đẩy đến máy chủ từ xa. Tôi muốn các tập tin groovy cập nhật và gsp của được đưa vào đúng chỗ trên máy chủ từ xa để grails sẽ nhận những thay đổi cho thử nghiệm từ xa. Điều này có thể không?Tôi làm cách nào để kiểm tra tệp để xây dựng bằng git?
Trả lời
Nếu bạn đang đẩy đến repo từ xa, nơi "nó chỉ có vẻ chứa một gói lớn tệp, không có mã nguồn thực tế "(như bạn nêu chi tiết trong nhận xét), điều đó có nghĩa là" bare repo ", điều tốt cho phép bạn đẩy mà không có bất kỳ nguy cơ nào khác nhau giữa cây đang hoạt động và dữ liệu git.
Sau đó, như được mô tả trong "Can I use git to keep a remote server up to date?", một repo khác (không trần) và post-update hook
ở phía bên repo trần sẽ đưa bạn đến nơi bạn muốn.
Các OP TripWired cho biết thêm:
Được rồi vì vậy những gì tôi đã làm là:
- tạo repo trần để kiểm tra trong đó
- Tôi tạo ra một repo đó là tiêu chuẩn, về cơ bản tôi có
~/project.git
và~/project
. tôi nhân bản
project.git
vàoproject
và trongproject.git/hooks/post-update
tôi đặt:cd ../../project env -i git checkout. env -i git pull
Tôi cũng chắc chắn rằng sau khi cập nhật đã thực thi.
Khi tôi chạy móc từ dòng lệnh nó hoạt động tốt, nhưng nó không có vẻ làm việc khi tôi làm một kiểm tra trong repo.
Tôi đồng ý với các bước 1 và 2, nhưng sau đó sẽ sử dụng this script, như trong this question.
Kiểm tra xem nó có hoạt động với một số git push
từ repo địa phương của bạn để hoàn tiền không.
#!/bin/sh
#
# This hook does two things:
#
# 1. update the "info" files that allow the list of references to be
# queries over dumb transports such as http
#
# 2. if this repository looks like it is a non-bare repository, and
# the checked-out branch is pushed to, then update the working copy.
# This makes "push" function somewhat similarly to darcs and bzr.
#
# To enable this hook, make this file executable by "chmod +x post-update".
git-update-server-info
is_bare=$(git-config --get --bool core.bare)
if [ -z "$is_bare" ]
then
# for compatibility's sake, guess
git_dir_full=$(cd $GIT_DIR; pwd)
case $git_dir_full in */.git) is_bare=false;; *) is_bare=true;; esac
fi
update_wc() {
ref=$1
echo "Push to checked out branch $ref" >&2
if [ ! -f $GIT_DIR/logs/HEAD ]
then
echo "E:push to non-bare repository requires a HEAD reflog" >&2
exit 1
fi
if (cd $GIT_WORK_TREE; git-diff-files -q --exit-code >/dev/null)
then
wc_dirty=0
else
echo "W:unstaged changes found in working copy" >&2
wc_dirty=1
desc="working copy"
fi
if git diff-index --cached [email protected]{1} >/dev/null
then
index_dirty=0
else
echo "W:uncommitted, staged changes found" >&2
index_dirty=1
if [ -n "$desc" ]
then
desc="$desc and index"
else
desc="index"
fi
fi
if [ "$wc_dirty" -ne 0 -o "$index_dirty" -ne 0 ]
then
new=$(git rev-parse HEAD)
echo "W:stashing dirty $desc - see git-stash(1)" >&2
(trap 'echo trapped $$; git symbolic-ref HEAD "'"$ref"'"' 2 3 13 15 ERR EXIT
git-update-ref --no-deref HEAD [email protected]{1}
cd $GIT_WORK_TREE
git stash save "dirty $desc before update to $new";
git-symbolic-ref HEAD "$ref"
)
fi
# eye candy - show the WC updates :)
echo "Updating working copy" >&2
(cd $GIT_WORK_TREE
git-diff-index -R --name-status HEAD >&2
git-reset --hard HEAD)
}
if [ "$is_bare" = "false" ]
then
active_branch=`git-symbolic-ref HEAD`
export GIT_DIR=$(cd $GIT_DIR; pwd)
GIT_WORK_TREE=${GIT_WORK_TREE-..}
for ref
do
if [ "$ref" = "$active_branch" ]
then
update_wc $ref
fi
done
fi
Điều này nghe có vẻ như nó có thể hoạt động. Vì vậy, nếu tôi có kho trống và tôi cập nhật hook sau khi cập nhật, tôi có thể sử dụng nó để sao chép mã nguồn vào một thư mục khác? Tôi giả sử tôi sẽ cần một repo git tương tự như những gì tôi có trên máy địa phương của tôi mà chỉ cần một bản sao từ repo trần? – TripWired
Có cho người đầu tiên, và có (trong trường hợp đơn giản nhất) đến lần thứ hai. Tôi có thể nghĩ ra những cách phức tạp hơn để làm điều đó để tránh sự trùng lặp, nếu kích thước repo khổng lồ là một vấn đề, nhưng tôi nghi ngờ bạn đang ở trong trường hợp đó. – Cascabel
Được rồi vì vậy những gì tôi đã làm là tạo ra repo trần để kiểm tra sau đó tôi tạo ra một repo đó là tiêu chuẩn, về cơ bản tôi có ~/project.git và ~/project. Tôi nhân bản project.git vào dự án và trong project.git/hooks/post-update Tôi đặt: (cd ../../project)(env -i git checkout.) (Env -i git pull) parens chỉ để tách biệt các dòng trên đây. Tôi cũng đảm bảo rằng sau khi cập nhật được thực thi. Khi tôi chạy móc từ dòng lệnh nó hoạt động tốt, nhưng nó không có vẻ làm việc khi tôi làm một kiểm tra trong repo. Ý tưởng nào? – TripWired
Nếu bạn dùng Linux, bạn có thể thiết lập công việc cron để sao chép tệp cho bạn hoặc nếu bạn đang ở trên cửa sổ, bạn có thể tạo tác vụ được lập biểu với tập lệnh dơi hoặc vbs nhỏ để sao chép tệp sang máy chủ từ xa . Nếu bạn cần trợ giúp về việc sử dụng Git thì đây là hướng dẫn sử dụng. Nếu đó không phải là những gì bạn đang tìm kiếm chúng tôi có thể làm việc trên một cái gì đó mà có thể làm việc tốt hơn hoặc nếu bạn cần giúp đỡ với các kịch bản cho tôi biết.
Vì vậy, git không lưu trữ các tập tin thực tế trên máy chủ từ xa? Tôi tạo ra một kho lưu trữ cục bộ, cam kết tất cả các tập tin sau đó đẩy đến máy chủ từ xa, nó chỉ có vẻ chứa một tập tin gói lớn, không có mã nguồn thực tế. Máy chủ là linux (mũ đỏ). Cảm ơn bạn về thông tin. – TripWired
Tôi có thể không chắc chắn những gì bạn đã yêu cầu chính xác. Một trong những lợi thế của Git là bạn không cần một cách tiếp cận tập trung, nhưng bạn có thể nếu bạn muốn. – Alos
Đối với nhận xét của bạn về bài đăng của Alos: điều khiển từ xa được gọi là kho lưu trữ trống - nó chứa toàn bộ kho ngoại trừ bản sao nội dung đã kiểm xuất. Ý tưởng là cho các kho trung tâm mà bạn chỉ cần đẩy và kéo từ, không cần phải có các tập tin.
Điều đó nói rằng, có rất nhiều cách tiếp cận để làm những gì bạn đang cố gắng làm.
Bạn có thể tạo một bản sao không từ xa khác, và sử dụng nó để kéo từ trần và thực hiện kiểm tra. Điều này có lẽ là dễ nhất.
Bạn có thể trực tiếp kiểm tra các tệp (sử dụng
git read-tree
vàgit checkout-index
) từ kho lưu trữ trần (ví dụ về tâm trí, git.git's install-doc-quick.sh).Bạn thậm chí có thể sử dụng điều khiển từ xa không phải là từ xa, nhưng hãy nhớ rằng việc đẩy vào repo không trần là nguy hiểm vì cây làm việc không được cập nhật. Tùy thuộc vào phiên bản git của bạn, có nhiều biện pháp bảo vệ khác nhau mà bạn sẽ phải ghi đè và bạn sẽ sửa chữa cây công việc sau khi đẩy (có thể là
git reset --hard
).
Không có vấn đề mà tiếp cận bạn đi, giả sử bạn muốn kích hoạt kiểm tra của bạn sau mỗi lần đẩy, bạn có thể sử dụng post-receive or post-update hook để làm như vậy. (Bạn có thể kiểm tra độ dài của thời gian kể từ lần kiểm tra cuối cùng nếu bạn muốn tránh lặp lại các thử nghiệm từ một đợt đẩy)
- 1. Làm cách nào để chạy Kiểm tra Web trong khi xây dựng nhóm (cho TFS 2010)?
- 2. Tôi làm cách nào để xây dựng kế hoạch kiểm tra cho bộ phận QA của chúng tôi?
- 3. Tôi làm cách nào để kiểm tra tệp jar đã ký bằng cách sử dụng Ant?
- 4. Làm cách nào để kiểm tra trạng thái xây dựng chỉ mục trên Oracle 11?
- 5. Tôi làm cách nào để xây dựng OpenCV với TBB?
- 6. kiểm tra đơn vị xây dựng các tệp
- 7. Làm cách nào để kiểm tra trang web bằng XAMPP?
- 8. Tôi làm cách nào để xây dựng gói SharePoint 2010 bằng dòng lệnh?
- 9. CruiseControl.net - Cách kiểm tra mã trong khi xây dựng
- 10. Tôi làm cách nào để kiểm tra dịch vụ WCF?
- 11. Làm thế nào để xây dựng HttpPostedFileBase?
- 12. Làm thế nào để xây dựng một dự án C# mà không kiểm tra phụ thuộc?
- 13. Làm cách nào để kiểm tra chỉ một phần của kho lưu trữ git trong quá trình xây dựng bằng tre?
- 14. Làm cách nào để xây dựng một ConstraintViolationException?
- 15. Làm cách nào để kiểm tra mã AngularJS bằng Mocha?
- 16. Làm cách nào để kiểm tra phiên bản cụ thể của một tệp trong Git?
- 17. Tôi làm cách nào để kiểm tra báo cáo jasper?
- 18. Làm cách nào để kiểm tra xem tệp có tồn tại bằng Emacs Lisp không?
- 19. Làm cách nào để chạy một giai đoạn duy nhất trong xây dựng bằng tre?
- 20. Làm cách nào để tắt proguard để xây dựng ứng dụng Android của tôi?
- 21. Làm cách nào để .đăng ký tệp bằng Git GUI?
- 22. Làm thế nào để kiểm tra git hooks
- 23. Làm cách nào để kiểm soát phiên bản công cụ và thư viện xây dựng?
- 24. Tôi đang tải xuống tệp bằng Python urllib2. Làm cách nào để kiểm tra dung lượng tệp lớn?
- 25. Làm cách nào để kiểm tra EOF bằng Python?
- 26. Làm cách nào để bạn kiểm tra cookie bằng Chrome?
- 27. Tôi làm cách nào để kiểm tra các url django?
- 28. Tôi làm cách nào để kiểm tra kiểu trong MongoDB?
- 29. Tôi làm cách nào để kiểm tra dịch vụ web?
- 30. Làm cách nào để có cơ sở dữ liệu kiểm tra Rails để xây dựng lại trước mỗi bài kiểm tra?
Bạn đang sử dụng Linux, mac hoặc cửa sổ? – Alos
Máy chủ từ xa là linux, tại địa phương tôi có một máy cửa sổ (sử dụng git rùa) và tôi cũng có một mac. Vì vậy, tôi đang đồng bộ mã giữa các máy đó thông qua điều khiển từ xa, nhưng tôi muốn điều khiển từ xa để có một bản xây dựng tích cực của ứng dụng grails được cập nhật khi đẩy. – TripWired
Chỉ cần thêm một số đề xuất làm nhận xét cho câu trả lời của tôi cho bản thực thi 'sau khi cập nhật 'của bạn. Xem liên kết cuối cùng của nhận xét đó trước tiên. – VonC